Một thực thể không yếu vì nó không thể tồn tại độc lập mà vì nó không thể được xác định một cách độc lập. Do đó, một mối quan hệ “dẫn dắt” đến một thực thể yếu được gọi là mối quan hệ “xác định”. Trên thực tế, điều này có nghĩa là khóa chính của cha mẹ được di chuyển vào (thường là thích hợp ) tập con PK của trẻ (thuật ngữ "thực thể yếu" thường được định nghĩa liên quan đến khóa chính, mặc dù về lý thuyết nó có thể áp dụng cho bất kỳ khóa nào).
Hoàn toàn hợp pháp khi có một thực thể không thể tồn tại độc lập, nhưng có thể được xác định một cách độc lập - nói cách khác, thực thể đó có mối quan hệ không xác định với một thực thể không phải NULL.
Bạn phải hỏi:can historyLineID
là duy nhất một mình hoặc kết hợp với orderID
? Tôi nghi ngờ trường hợp sau là trường hợp này, điều này sẽ khiến nó trở thành một thực thể yếu.
Những gì bạn đã cho chúng tôi thấy không phải là một thực thể yếu - PK của cha mẹ không được chuyển sang PK của trẻ.
Về cơ bản, bạn có hai tùy chọn:
-
orderHistory
có PK tổng hợp:{orderID, historyLineID}
, trong đóorderID
là FK. BTW, PK này có thể được coi là "tự nhiên": -
orderHistory
có PK đại diện:{orderHistoryID}
, trong khiorderID
nằm ngoài PK. Bạn vẫn cần có khóa thay thế{orderID, historyLineID}
mặc dù:
Có, đây là tùy chọn đầu tiên được mô tả ở trên. Trừ khi bạn có các mối quan hệ con trên orderHistory
bản thân nó, đây cũng là giải pháp tốt nhất. Nếu orderHistory
có con, hơn thế điều này có thể là giải pháp tốt nhất hoặc có thể không phải là giải pháp tốt nhất, tùy thuộc vào một số yếu tố.
Đây không phải là-hoặc. Một trường có thể vừa là FK vừa là một phần của khóa (chính hoặc thay thế), như được hiển thị ở trên.
Bạn sẽ không thể tiếp cận 3NF trừ khi bạn chỉ định chính xác các khóa của mình và bạn sẽ không thể làm điều đó nếu không xem xét thực thể nào có thể được nhận dạng độc lập và thực thể nào không thể.