30/09/2018, 18:32

Vấn để nhỏ trong thiết kế cớ sở dữ liệu?

Mình đang thiết kế một cơ sở dữ liệu quản lý học viên của trung tâm. Trong đó có Bảng HOCVIEN , mà trong HOCVIEN thì có người thân và cũng là học viên trong trung tâm, và người thân thì có thể có nhiều người thân.
Vậy nên thiết kể ra sao?
Mình định thêm 1 bảng gia đình vào để mỗi học viên có cột GiaDinh.Như vậy có quá không vì mỗi học viên hoặc không có người thân hoặc chỉ có 1 đến 2 người thân. nếu tạo riêng một bảng gia đình thì không biết có ổn không?
Mọi người cho mình ý tưởng nhé.

Dương Tiến Thịnh viết 20:36 ngày 30/09/2018

Mình nghĩ là bạn nên tạo ra 1 bảng người thân. Cấu trúc như sau:

  • id
  • id học viên 1
  • id học viên 2

Khi muốn truy xem A có phải là người thân của B hay không ta chỉ cần:

select * from hocvien, nguoithan
where (((idhocvien1=idbhocvienA) and (idhocvien2=idhocvienB)) or ((idhocvien1=idhocvienB) and (idhocvien2=idhocvienA)))
huong viết 20:38 ngày 30/09/2018

Không may một học viên có 3 4 người thân thì sao? Có cách này hơi chuối không biết dùng được không?
Thêm cột người thân vào hocvien,Và nếu học viên nào có quan hệ người thân với nhau thì cho cùng mã số trong cột người.

Phạm Hoàng Tuấn viết 20:47 ngày 30/09/2018

Trong trường hợp này là quan hệ nhiều-nhiều, 1 học viên có thể có nhiều người thân và ngược lại, 1 người thân có thể là người thân của nhiều học viên , nên bạn tạo thêm 1 bảng là gia đình chẳng hạn, lưu MAHV, MATN(thực chất cũng là mã của 1 Hv khác ). Ở đây bạn cần làm rõ là có cần lưu quan hệ của 2 học viên hay không, nếu có thì bạn cần thêm 1 bảng quan hệ QUANHE(vợ,chồng,bố, mẹ…) và đưa mã này vào bảng, nếu bạn không lưu quan hệ thì mỗi lần thêm 1 thực thể bảng GIADINH, bạn fai kiểm tra xem mối quan hệ của 2 HV đó có trong bảng GD hay chưa, tránh trường hợp HV1 là vợ của HV2, bạn đã lưu rồi, sau này khi tới HV2 là chồng của HV1 bạn lại lưu thêm lần nữa.

Dương Tiến Thịnh viết 20:41 ngày 30/09/2018

Việc có nhiều người thân cũng không vấn đề gì cả. Ví dụ học viên có Id=02. Người thân của học viên đó có id lần lượt là 05,06,09…
Trong bảng sẽ tổ chức như sau:
Row 1:
id=1
idhv1=02
idhv2=05
Row 2:
id=2
idhv1=02
idhv2=06
Row 3:
id=3
idhv1=02
idhv2=09

Bài liên quan
0