我将这个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
的孩子,还是应该是独立的实体?
或任何更好的解决此问题的建议。
答案 0 :(得分:0)
您必须决定系统要做什么。您是希望旧邮件反映某人的新名称,还是希望每条邮件都具有在创建邮件时生效的名称(以及其他详细信息)?
如果您希望系统仅反映当前的个人详细信息,那么您的所有消息需求都是PERSON的外键。
另一方面,如果您希望您的邮件始终以相同的方式显示,即使发送邮件的人更改了姓名,电子邮件地址或其他详细信息,您也必须找到一种方法来保留邮件。历史信息。两个明显的选择是(i)将人员详细信息归结为消息 - 如在您当前的设计中或(ii)保存PERSON的历史表,其中包含个人详细信息的每个组合的快照,以及MESSAGE参考相应的人员历史记录。外键。