在数据库中的一对一或一对多关系中,哪个表必须具有外键?

时间:2018-01-09 21:51:45

标签: mysql database foreign-keys relational-database erd

抱歉如果我的问题看起来太明显但我仍然找不到数据库模型关系之间的逻辑。

ONE TO ONE:

如果我有一个只有一个地址的客户,我必须将外键放在哪里?

我首先想到把它放在顾客的桌子上是个好主意;一列,外键引用地址的id。

因为如果我需要创建一个客户,首先我需要创建一个地址。

custfk

但我在互联网上找到了一些例子 ,他们将外键放在地址'表中,指的是客户的ID

addressfk

ONE TO MANY:

如果客户可以有多个地址,那么同样的问题也适用,在哪个表中,我应该把我的外键放在哪里?

1 个答案:

答案 0 :(得分:1)

外键出现在"很多"侧。

例如,如果sales_order与最多一个customer相关联,而customer可以为零,则一个或多个sales_order

然后我们将customer_id放在sales_order表中,作为对id表中(唯一)customer列的引用。

这意味着我们首先需要向customer添加一行,然后才能为sales_order添加customer。 (外键约束将阻止我们在sales_order中添加一行,该行的customer_id列中的值不存在于id的{​​{1}}列中。

-

对于一对一关系的特殊情况,我们可以以与一对多相同的方式实现,在外键列上具有额外的UNIQUE约束。它实际上归结为决定关系的哪个方向是强制性的,哪个是可选的。基本上,我们会在哪一个表中添加一行?我们稍后添加行的表将具有引用我们之前添加行的表的外键约束...