30/09/2018, 18:17

Làm phiền mọi người chút ít về phân tích quan hệ csdl

Ví dụ mình có:

TINH_TP( mã tỉnh )

QUAN_H( mã quận huyện, mã tỉnh)

PHUONG_XA( mã phường xã, mã quận huyện)

create table tinh_tp
(
    ma_ttp tinyint primary key  -- 1 -> 64 tinh thanh -- 
)

create table quan_h
(
    ma_qh char(3) not null primary key,  --Viet tat chu cai ten quan huyen
    ma_ttp tinyint not null references tinh_tp,
    unique (ma_qh, ma_ttp)
)

create table phg_xa
(
    ma_px char(3) primary key,  -- Viet tat chu cai ten phuong xa --
    ma_qh char(3) not null references quan_h,
    unique (ma_px, ma_qh)
)

Mình viết như vậy thì trong bảng phường xã có vấn đề sau:

Nhập 2 phường xã ở 2 quận huyện khác nhau có cùng mã sẽ không được.
vd như TT (Tân Thành) quận 1 với TT (Tân Thới) quận 2

Còn trong bảng quận huyện nếu 2 quận huyện ở 2 tỉnh khác nhau có cùng mã cũng không được.

MONG MỌI NGƯỜI GỢI Ý CHO MÌNH HƯỚNG GIẢI QUYẾT NHỮNG VẤN ĐỀ MÌNH NẾU TRÊN, CÓ CẦN PHẢI THÊM TRƯỜNG ID VÀO KHÔNG? CÁM ƠN.

mình không có ý hỏi bài tập nhưng mong mọi ng gợi ý để mình giải quyết những trường hợp tương tự sau này, mình mới học hệ cơ sở dữ liệu được mấy tuần nên phân tích còn yếu.

vũ xuân quân viết 20:21 ngày 30/09/2018

Nhập 2 phường xã ở 2 quận huyện khác nhau có cùng mã sẽ không được.vd như TT (Tân Thành) quận 1 với TT (Tân Thới) quận 2

Chưa hiểu lắm về ví dụ:
TT ở đây là khóa xóa chính trong phg_xa hả ?

ma_px char(3) primary key

Đã là khóa chính rồi thì làm sao có vụ cho trùng mà ở 2 phường xã ở 2 quận huyện khác nhau.

Tại sao bạn không để khóa chính là kiểu int(10) và tự động tăng. Mà phải là kiểu string và từ nhập bằng tay ?
Điều này không nên trong kiểu dữ liệu tron csdl.
Khóa chính nên là kiểu int và tự động tăng.

Phong Pham viết 20:22 ngày 30/09/2018

à …kiểu như 2 phường có cùng mã nhưng khác nhau huyện á bạn. trong ví dụ trên TT là ma_px (khóa chính), mình không biết mình viết đúng hay sai nên mong bạn sửa giúp.

Mình lên mạng xem thì thấy người ta hay tạo thêm khóa ID tự tăng nhưng do mình mới học hệ cơ sở dữ liệu, phân tích quan hệ các bảng nên cô áp đặt đề vậy.

Mình ví dụ thử dữ liệu mình mong muốn để bạn dễ hiểu nhe:

    ma_px             ten_px           ma_qh
     TT             Tân Thành           BC
     TT             Tân Thới            TD
     TL             Tân Long            BC
     TL             Trường Long         HM

     ma_qh         ten_qh
      BC         Bình Chánh
      TD         Thủ Đức
      HM         Hóc Môn
Itachi Citus viết 20:22 ngày 30/09/2018

Bạn để primary key của phg_xa gồm cả ma_px, ma_ttp và ma_qh là được. Bảng quan h primary key là ma_ttp với ma_qh.
http://www.w3schools.com/sql/sql_primarykey.asp

Nhập 2 phường xã ở 2 quận huyện khác nhau có cùng mã sẽ không được.

Bài liên quan
0