sql - 多个外键有意义吗?

标签 sql mysql database-design foreign-keys

一个表有多个外键有意义吗?

假设我有三个表,表 A表 B表 C。如果我将表视为对象(并且它们被映射到我的代码中的对象),那么表 A 和 B 都与表 C 具有多对一关系。即表/对象 A 和 B 都可以有很多 C 的实例。所以我的设计方式是 Table C 指向 Table A 中的主键>表 B:换句话说,表 C 有 2 个外键(a_Id 和 b_Id)。

编辑:我还忘了提到 Table A 可以有许多 Table B 的实例。所以 Table B 在 Table A 中有一个外键。如果这会有所不同...

我想知道这是否有意义,或者有更好的方法吗?谢谢。

最佳答案

这很好,但请注意,只有当 C 始终必须同时具有 A 和 B 作为一对时才有意义。

如果您只想让 A 拥有 C,而 B 拥有 C,但 A 和 B 在其他方面不相关,那么您应该将外键放入 A 和 B 中,并允许其为空。

更新:经过澄清后,您似乎想要两个独立的关系:一个 A 可以有多个 C,一个 B 可以有多个 C,但是一个 C 只能属于一个 A 或一个 B。

解决办法:是两个独立的一对多关系,所以新建两张表A_C和B_C,把外键放在那里。 A_C 包含 A 的外键和 C 的外键。对于 B_C 也是如此。

关于sql - 多个外键有意义吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2239889/

相关文章:

sql - MongoDb 中的模式

Mysql Replication-master-bin日志文件没有更新

sql - 帮我完成以下sql查询

database - 数据库中的 GUID 类型

php - 使用 JS/PHP/MySQL 检查新内容?

mysql - 管理sql数据库中的位置的最佳方法是什么

sql - PostgreSQL:如何将多列中的每个条目乘以固定数字?

php - 根据表中的上次更新时间更新数据库中的数据

sql - CREATE TABLE [dbo].[Table] - dbo 部分是什么意思?

教程中的 MySQL SQL 查询问题