mysql - 多个表中的相同外键

标签 mysql database database-design foreign-keys

我在 SO 和 google 上看到过帖子,指出使用 Mysql 不能有多个同名的外键。我的问题是如何在多个其他表中引用一个表中的同一列。在我的例子中,我有一个包含 FAM_ID 的 FAMILY 表。我希望它成为我的 DOCUMENTS 和 CONTACT 表中的外键,因为其中的行与 FAM_ID 有关系。因此,如果我理解我正确阅读的内容,我需要在 DOCUMENTS 和 CONTACT 中为该列命名不同的名称(与 FAM_ID 不同),以便将它们作为外键映射到 FAMILY 表中的 FAM_ID。我只是不明白什么,还是这是我唯一的选择?这似乎是数据模型的一个相当普遍的要求。

最佳答案

您无需为它们命名。您可以在 FAMILY 中有一个 FAM_ID 列,在 DOCUMENTS 中有一个 FAM_ID 列,在 CONTACT 中有一个 FAM_ID 列。

在这种情况下,将它们命名为同一事物可以清楚地表明它们指的是同一事物。但是,如果您愿意,您也可以提出自己的另一个命名约定。

例如,我在家庭表中使用类似family_ID 的内容,在从联系人和文档表。

据我所知,将它们命名为相同的唯一缺点是,在进行连接时,您不能仅通过列名引用它们,您必须为它们添加别名或通过 tablename.columnname 引用它们。

编辑:我想我已经找到您所说的无法使用相同名称的意思了。当您在单个表中添加外键关系时就是这种情况,如下所述:http://bugs.mysql.com/bug.php?id=46363

关于mysql - 多个表中的相同外键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3349988/

相关文章:

MySQL 我可以将 SELECT LEFT 嵌套在 SELECT 语句中吗?

database - 数据库管理系统 : Meaning of the following Relational Calculus Example:

sql - 什么是对 SQLite 数据库(仅模式)进行版本控制的好方法(或工具)?

mysql - 帮助数据库建模

mysql - 体育/游戏结果应用程序中的硬删除与软删除

sql - 向 gerrund 表添加索引

asp.net - 创建 Entity Framework 数据库时出现 Mysql 语法错误

php - 简单数据库查询的问题

sql - 如何将一个表与另一个表关联起来以备将来记录

PHP SQL 将文本值插入数据库