【问题标题】:one-to-one relationship in database数据库中的一对一关系
【发布时间】:2011-08-21 09:10:53
【问题描述】:

假设我有一张桌子users,PK 是id_user

我在表 users 和表 employer 之间也有识别关系。我可以将 PK id_user 用作表 employer 中的外键,也可以用作此表中的 PK(具有唯一约束)?

在这种情况下,雇主只有一个工人,一个工人只有一个雇主。

【问题讨论】:

  • 我不确定我明白了,这是不是 - “雇主只有一个工人,一个工人只有一个雇主。”您的解决方案的需求或不需要的产品?
  • 在这种情况下是一个要求。

标签: mysql sql database-design data-modeling


【解决方案1】:

简短回答:是的。当外键也是子表的主键时,它会强制它成为一对一的。

更长的答案:根据我的经验,我所做的每一个 1 对 1 都在后来扩展为 1 对多或多对多,因为更好地理解了用户的需求。示例:您最终需要雇主的历史记录,所以突然之间,您有一个多对多的从人员到雇主的有效日期。

在这种情况发生了几次之后,我特意深入研究了为什么一对一似乎有意义,但总是发现它没有意义。以至于我为自己制定了一条经验法则,以避免一对一的表格,因为它们通常表明对需求的理解不完整。

【讨论】:

  • +1。用户和雇主之间的 1:1 关系似乎很奇怪。 真的每个雇主只有一个用户吗?
【解决方案2】:

主键是特殊的唯一键。在这种情况下,我不会在雇主表中链接工人,因为通常雇主有不止一名工人。如果您绝对确定它是一对一的关系,我不明白您为什么使用 2 个表而不是一个。意思是,将雇主字段添加到工人表中。真正的一对一关系是例如电话号码或电子邮件地址,通常它们与所有者一起存储,而不是在单独的表中。

【讨论】:

    猜你喜欢
    • 2012-10-20
    • 1970-01-01
    • 2011-07-30
    • 2014-11-06
    • 2015-08-05
    • 1970-01-01
    • 1970-01-01
    • 2014-08-18
    相关资源
    最近更新 更多