关系一对一(1:1)

时间:2017-02-19 01:08:26

标签: mysql sql foreign-keys mysql-workbench relationship

我对一对一的关系有些怀疑。在我的例子中,我有一家公司,公司有一个地址。 (数据类型是随机的,仅用于举例说明)

选项1:

Option 1

选项2:

Option 2

什么是最好的选择?我知道,我可以将所有数据放在同一个表中,但是单个表的属性很多。

3 个答案:

答案 0 :(得分:1)

我个人试图避免创建一对一的关系。在您的示例中,您有一家与地址有关系的公司。我只是将外键放在公司表上,这将正式使这成为一对多的关系(即使你永远不会那样使用它)。所以,我首先会问你是否可以接受一个允许两家公司拥有相同地址的模型。

如果不是,一对一关系的可能解决方案是与主键共享相同的值。因此公司表中的ID 1000与地址表中的ID 1000匹配。很多像EF和Hibernate这样的ORM工具都使用这种方法,没有很好的原生SQL支持方式,没有遇到很多问题(级联删除提一个)

答案 1 :(得分:0)

我同意Fredrik Rudberg的观点。除非另一个表代表一个独立的实体(这是特定于问题域),否则不建议将其保持在单独的表中以实现一对一的关系。 您是否有地址表(如果已创建)有助于满足任何其他业务需求?如果没有,那么将地址显示为公司实体(公司表)的属性(列)不是一个好主意吗?

答案 2 :(得分:0)

我在两种情况下创建了1-1关系:

  • 依赖表(在您的情况下为Address)可以与其他表连接。所以我把它作为一个独立的实体。
  • 抽象或特定用例。例如,我总是试图保持用户和&个人数据分为2个单独的表格。

考虑到这一点,&虽然你的设计不允许第一种情况发生(因为其中有Company_id列),我会将两个表都推入一个。不要担心桌子的大小。在你的情况下,这不是什么大不了的事。