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

标签 database database-design

举个例子,一个客户可能有多个订单。这就是一对多关系。

当我像这个例子一样设计数据库表时,我总是会想到是否应该让 customers 表有一个 order_id 外键列,或者我是否应该让 orders 表具有 customer_id 外键。走哪条路?

在数据库设计中是否有一个规则或约定,哪种方式更好地决定哪个表应该包含另一个表的外键? (我希望我用那个例子清楚地表达了我的问题。)

澄清一下:我知道我应该在示例中的 orders 表中声明 customer_id,但我正在寻找规则/约定 (如果有的话)来帮助我在未来轻松地决定哪个表应该声明一般的外键列。

最佳答案

在一对多关系中,外键(FK)总是在“多”表中,指向“一”表的主键(PK)。
如果您碰巧有多对多关系,那么您必须创建一个包含两个 PK 的关系表。例如:一个学生可以选择很多类(class),一个类(class)有很多学生。关系表可以称为“注册”并将包含两个 PK。

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

关于database - 一个简单的问题,在多对多关系中,哪个表应该有另一个表的外键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54343290/

相关文章:

java - 即使从未调用 persist,@Version 列也会更新

database - 如何计算每个 MariaDB 表行中的实际数据大小?

sql - 如何创建多个一对一

database-design - 具有多种类型用户的数据库设计

java - 无法登录sqldeveloper

python - 如何在 pymssql 中执行 .sql 文件

java - NetBeans 表示用户 'root' @'localhost' 的访问被拒绝(使用密码 : YES))

mysql - 电视剧应用程序的数据库设计

mysql - 确保表条目是唯一的

postgresql - postgresql DB 中唯一键的正确数据类型是什么?