一个简单的问题,在一对多关系中哪个表应该具有另一个表的外键

时间:2019-01-24 09:30:09

标签: database database-design

仅举一个例子,假设一个customer可以有多个orders。那是一对多的关系。

当我像这样的示例设计数据库表时,我总是总是在思考是否应该让customers表具有order_id 外键列,还是应该让orders表具有一个customer_id 外键。往哪走?

DB设计中是否存在规则或约定,哪种方法更好地决定哪个表应包含另一个表的外键? (我希望我能通过这个例子清楚地表达我的问题。)

要澄清:我知道我应该在示例中的customer_id表中声明orders,但是我正在寻求规则/惯例(如果有)来提供帮助以后我可以轻松决定一般应该在哪个表中声明外键列。

3 个答案:

答案 0 :(得分:1)

在一对多关系中,外键(FK)始终在“许多”表中,指向“一个”表的主键(PK)。
如果您碰巧具有多对多关系,则必须创建一个包含两个PK的关系表。例如:一位学生可以选择许多课程,一位 Course 可以有很多学生。关系表可以称为“注册”,其中包含两个PK。

看看herehere,或搜索“关系数据库规范化”。

答案 1 :(得分:0)

您应该在订单表中包含一个Customer_id。

原因为何?您想将订单添加到订单表,而不必更新客户表。另外,您也不想保留客户的订单清单。

一个客户可以有多个订单,外键旨在允许多个具有相同值的实例。希望这是您需要的答案

答案 2 :(得分:0)

我认为决定的关键动词是(在一对多关系的情况下)。如果实体 A 一些实体 B ,则应在关系 A 的右侧声明外键> 具有 B ,即位于 B 中。