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

Mysql 在数据库中的一对一或一对多关系中,哪个表必须具有外键?,mysql,database,foreign-keys,relational-database,erd,Mysql,Database,Foreign Keys,Relational Database,Erd,很抱歉,如果我的问题看起来太明显,但我仍然找不到数据库模型的关系之间的逻辑 一对一: 如果我的客户只有一个地址,我必须将外键放在哪里 我首先认为把它放在顾客桌上是个好主意;一列,外键引用地址的id 因为如果我需要创建一个客户,首先我需要创建一个地址 但我在网上找到了一些例子 ,他们将外键放在地址表中,引用客户的id 一对多: 如果客户可以有多个地址,那么同样的问题也会出现,在哪个表中,我应该放置外键?外键位于“多”侧 例如,如果一个销售订单最多与一个客户关联,并且一个客户可以没有,则一个或多

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

一对一:

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

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

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

但我在网上找到了一些例子 ,他们将外键放在地址表中,引用客户的id

一对多:


如果客户可以有多个地址,那么同样的问题也会出现,在哪个表中,我应该放置外键?

外键位于“多”侧

例如,如果一个
销售订单
最多与一个
客户
关联,并且一个
客户
可以没有,则一个或多个
销售订单

然后我们将
customer\u id
放在
sales\u order
表中,作为对
customer
表中(唯一的)
id
列的引用

这意味着我们首先需要在
客户
中添加一行,然后才能为该
客户
添加
销售订单
。(外键约束将阻止我们在
sales\u order
中添加一行,该行在
customer\u id
列中的值在
customer
id
列中不存在

--


对于一对一关系的特殊情况,我们可以采用与一对多相同的方式来实现它,在外键列上增加一个唯一的约束。这实际上可以归结为决定关系的哪个方向是强制的,哪个方向是可选的。基本上,我们将首先向哪个表添加一行?在其中添加行的表d行之后将具有外键约束,该约束引用了我们之前添加的一行的表…

第一个[一对一]更像是一种样式(当然取决于需求)第二,你需要知道谁拥有谁你对own的意思是什么?我的意思是客户有一个地址…让我们举一个例子,你有3套房子,房子拥有你或你拥有房子?取决于你的答案,然后父母id代替孩子。嗯,好的,我明白你的想法,谢谢manIt可以补充说,在他的特殊情况下,地址可以随客户一起提供,至少我们没有保留地址的历史记录