Mysql

在 Person 和 User 之間實現一對一 (1:1) 的關係

  • June 2, 2016

場景描述

我將此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,email在表中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
...

引用自:https://dba.stackexchange.com/questions/13925