Entity relationship modelling: Ternary

ERD

Hầu hết chúng ta đều quen thuộc với Unary và Binary, còn Ternary thì không phổ biến lắm. Trong bài này chúng ta sẽ tìm hiểu về Ternary.

ERD

Ternary relationship đơn giản là relationship mà trong đó có 3 entity tham gia. Sự việc bắt đầu phức tạp khi xét tới Cardinality, sẽ có tất cả những loại Ternary relationship sau 1:1:1, 1:1:N, 1:M:N, M:N:P. Chúng ta cần một định nghĩa chuẩn thế nào là quan hệ x:y:z. Định nghĩa đó như sau:

Giả sử có 3 entity A, B, C và Ternary relationship R giữa chúng. R được gọi là x:y:z nếu:

  • Với mỗi cặp (a, b) thì có z thằng c quan hệ với (a, b).
  • Với mỗi cặp (b, c) thì có x thằng a quan hệ với (b, c).
  • Với mỗi cặp (c, a) thì có y thằng b quan hệ với (c, a).

Trong đó a, b, c lần lượt là các instance của A, B, C.

Tiếp theo, làm thế nào để tạo table biểu diễn Ternary relationship? Với mỗi một x:y:z, sẽ có cách tạo table khác nhau, nhưng đều có một điểm chung là cần 1 table T có 3 column AID, BID, CID, mỗi column là 1 foreign key trỏ tới primary key lần lượt của A, B, C. Chúng ta xét riêng từng loại Ternary relationship.

1:1:1
Theo định nghĩa ở trên, ta có 3 ràng buộc sau cho table T:

  • (AID, BID) phải là duy nhất.
  • (BID, CID) phải là duy nhất.
  • (CID, AID) phải là duy nhất.

Thật vậy, giả sử tồn tại 2 cặp (AID, BID) giống nhau ở 2 hàng là (a, b, c1) và (a, b, c2). Rõ ràng cặp (a, b) quan hệ với 2 instance của C là c1 và c2, trái định nghĩa. Lập luận tương tự cho (BID, CID) và (CID, AID).

Cũng vậy cho các Ternary relationship còn lại:

1:1:N
(BID, CID) phải là duy nhất.
(CID, AID) phải là duy nhất.

1:M:N
(BID, CID) phải là duy nhất (coi như là primary key).

M:N:P
(AID, BID, CID) phải là duy nhất (coi như là primary key).

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s