【问题标题】:Referring to super parent or as a separate entity?是指超级父母还是单独的实体?
【发布时间】:2012-02-26 03:42:59
【问题描述】:

我有这个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,telephonemessage 表中重复

所以我想将它引用到下面这样的person 表,

id
person_id
subject
content
...

但这似乎不对,因为具有相同电子邮件、姓名等的人可以向我发送任意次数的消息。所以他/她提供的细节可以重复。

所以我应该将message 设为父级person 的子级,还是它们应该是单独的实体?

或任何更好的建议来解决这个问题。

【问题讨论】:

  • 你的意思是“但是这似乎不对,因为一个具有相同电子邮件、姓名等的人可以向我发送任意次数的消息。所以他/他的详细信息她提供的可以重复。”?

标签: mysql sql entity-relationship mysql-workbench superclass


【解决方案1】:

你必须决定你想让你的系统做什么。您希望旧消息反映某人的新名称,还是希望每条消息都具有创建消息时有效的名称(和其他详细信息)?

如果您希望系统仅反映当前的个人详细信息,那么您需要的所有消息都是 PERSON 的外键。

另一方面,如果您希望您的邮件始终保持相同的外观,即使发送邮件的人更改了他们的姓名、电子邮件地址或其他详细信息,那么您必须找到一种方法来保持历史信息。两个明显的选择是(i)将人员详细信息非规范化到消息中 - 就像在您当前的设计中一样,或者(ii)保留一个 PERSON 的历史表,其中包含个人详细信息的每个组合的快照,其中 MESSAGE 引用适当的人员历史记录外键。

【讨论】:

    猜你喜欢
    • 2021-10-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-16
    • 1970-01-01
    • 2018-06-14
    • 1970-01-01
    相关资源
    最近更新 更多