Mysql
在 Person 和 User 之間實現一對一 (1:1) 的關係
場景描述
我將此
person
表作為超級父(或超類型),id firstname lastname email telephone ... ...
和
user
表作為孩子(或子類型)id person_id (FK) password username screenname ... ...
它們必須是一對一 ( 1:1 ) 的關係,因為使用者不能重複兩次,因此給定人員行中的特定**電子郵件值不能重複兩次。
然後我有這張
message
表,它儲存來自任何人的消息,id firstname lastname email telephone subject content ... ...
但您可以看到 ,
firstname
,lastname
,telephone
重複**。**message
所以,我想把它參考
person
下面這樣的表格,id person_id subject content ...
但這似乎不對,因為具有相同電子郵件,姓名等的人可以根據需要向我發送**消息多次,因此可以重複他/她提供的詳細資訊。
問題
- 那麼,我應該
message
作為父母的孩子person
還是他們應該是獨立的實體?- 或者,有沒有更好的建議來解決這個問題?
我有一張
person
桌子。很好(只是更改了PK列的名稱):
person ------ person_id PK firstname lastname email telephone ... ...
和一個作為孩子的使用者表。它們必須是 1:1 的關係,因為一個使用者不能重複兩次。
如果關係是 1:1(假設它
person
是 supertpe 並且user
是子類型,您可以使用與 Primary Key 和 Foreign Key 相同的列來處理此問題person
:user ---- person_id PK FK to person(person_id) password username screenname ... ...
因此,人員行中的電子郵件不得重複兩次。
在列中添加
UNIQUE
約束。person.email
然後我有這個消息表,它儲存來自任何人的消息,但你可以看到名字,姓氏,電子郵件,電話在消息表中重複。所以我想把它參考下面這樣的人表。
罰款(調整到以前的變化)。但是您還需要儲存誰發送消息以及誰是接收者:
message ------- message_id PK sender_id FK to user(person_id) --- or to person(person_id) receiver_id FK to user(person_id) --- that depends on your requirements subject content ...