仅举一个例子,假设一个customer
可以有多个orders
。那是一对多的关系。
当我像这样的示例设计数据库表时,我总是总是在思考是否应该让customers
表具有order_id
外键列,还是应该让orders
表具有一个customer_id
外键。往哪走?
DB设计中是否存在规则或约定,哪种方法更好地决定哪个表应包含另一个表的外键? (我希望我能通过这个例子清楚地表达我的问题。)
要澄清:我知道我应该在示例中的customer_id
表中声明orders
,但是我正在寻求规则/惯例(如果有)来提供帮助以后我可以轻松决定一般应该在哪个表中声明外键列。
答案 0 :(得分:1)
在一对多关系中,外键(FK)始终在“许多”表中,指向“一个”表的主键(PK)。
如果您碰巧具有多对多关系,则必须创建一个包含两个PK的关系表。例如:一位学生可以选择许多课程,一位 Course 可以有很多学生。关系表可以称为“注册”,其中包含两个PK。
答案 1 :(得分:0)
您应该在订单表中包含一个Customer_id。
原因为何?您想将订单添加到订单表,而不必更新客户表。另外,您也不想保留客户的订单清单。
一个客户可以有多个订单,外键旨在允许多个具有相同值的实例。希望这是您需要的答案
答案 2 :(得分:0)
我认为决定有的关键动词是(在一对多关系的情况下)。如果实体 A 有一些实体 B ,则应在关系 A 的右侧声明外键> 具有 B ,即位于 B 中。