多个表中的相同外键

时间:2010-07-28 04:43:25

标签: mysql database database-design foreign-keys

我在SO上看过帖子,并通过谷歌声明,使用Mysql你不能拥有多个同名的外键。我的问题是如何从多个其他表中的一个表中引用相同的列。在我的情况下,我有一个包含FAM_ID的FAMILY表。我希望这是我的DOCUMENTS和CONTACT表中的外键,因为那些行与FAM_ID有关系。因此,如果我理解了我正确阅读的内容,我需要在DOCUMENTS和CONTACT中命名不同的名称(而不是FAM_ID),以便将它们映射为FAMILY表中FAM_ID的外键。我只是不理解某事或这是我唯一的选择吗?这似乎是数据模型的一个相当普遍的要求。

3 个答案:

答案 0 :(得分:2)

您不需要为它们命名不同的东西。您可以在FAMILY中拥有FAM_ID列,在DOCUMENTS中拥有FAM_ID列,在CONTACT中拥有FAM_ID列。

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

例如,我在系列表格中使用了family_ID的内容,而在联系人和文档表格中引用了contact_familyIDdocument_familyID

根据我的意见,将它们命名为相同的唯一缺点是,在进行连接时,您不能只按列名引用它们,您必须使用别名或通过tablename.columnname引用它们。

编辑:我想我已经找到了你不能拥有相同名字的意思。在单个表中添加外键关系时就是这种情况,如下所述:http://bugs.mysql.com/bug.php?id=46363

答案 1 :(得分:1)

fk_family_documents

fk_family_contact

将外键名称设置为类似上面的内容将是一种方法,我不确定这是否有别名,但是,是的。如果要将其添加为约束,请参阅以下示例语法:

ALTER TABLE documents ADD CONSTRAINT fk_family_documents_id FOREIGN KEY (fam_id) REFERENCES family(id)

当然,您可能需要定制,但应该让您知道如何设置它。

答案 2 :(得分:0)

我遇到同样的问题,并没有真正发现任何好的解决方案。我原本想让我的外键名称与它们引用的主键相同,以使自然连接成为可能。所以我将把我的外键重命名为{reference_primary_key} _1,{reference_primary_key} _2等。