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.
Chưa hiểu lắm về ví dụ:
TT ở đây là khóa xóa chính trong phg_xa hả ?
Đã 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.
à …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:
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