2017-02-19 123 views
0

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

选项1:

Option 1

选项2:

Option 2

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

+4

最好的选择是满足您的需求。根据我的经验,一家公司可以同时拥有多个地址,并且可以随时间推移。 –

+1

如果address_id将为必需值,则选项1将要求您先创建地址。如果需要company_id,选项2将要求相反。或者如果添加约束条件等等 – davejal

+1

第三种选择:使用列'(company_id,address_id)'和两个列上的唯一约束的连接表。这样你的公司和地址表可以保持不变,并通过第三张表格链接它们。唯一约束确保只有1:1关系。 – knittl

回答

1

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

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

0

我同意Fredrik Rudberg。除非另一个表代表一个独立的实体(这是特定于问题域的),否则不建议将它们保存在一对一的关系表中。 您是否有地址表(如果已创建)有助于其他业务需求?如果不是,那么对于公司实体(公司表)出现地址作为属性(列)是不是一个好主意?

0

我创建2分的情况下1-1的关系:

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

考虑到这一点,&而你的设计不会让第一种情况发生(因为它Company_id列),我将两个表推入一个。不要担心桌子的大小。这对你的情况并不是什么大不了的。