多个表中的相同外键

问题描述:

我已经在SO上看过帖子,并且通过google表明,使用Mysql你不能拥有多个同名的外键。我的问题是我如何引用多个其他表中的一个表中的同一列。在我的情况下,我有一个FAMILY表,其中包含FAM_ID。我希望这是我的DOCUMENTS和CONTACT表中的外键,因为这些行中的行与FAM_ID有关系。所以如果我明白我读的是正确的,我需要在DOCUMENTS中命名该列并联系不同的名称(比FAM_ID),以便将它们映射为FAMILY表中的FAM_ID的外键。我只是不理解某些东西,或者这是我唯一的选择吗?这似乎是数据模型的一个相当常见的要求。多个表中的相同外键

你不需要命名他们不同的东西。您可以有FAMILY中的FAM_ID列,DOCUMENTS中的FAM_ID列和CONTACT中的FAM_ID列。

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

例如,我沿着家庭表中的family_IDcontact_familyID,document_familyID的行在联系人和文档表中引用它时使用了某些内容。

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

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

+0

是的,您发布的链接就是我所说的。我用工作台来创建我的表,当我去出口到SQL为了创建数据库和表我得到了它引用的错误。我想这似乎是“应该”更清洁,列名相同。但我并不是很擅长数据库设计和实现,所以我想问一些知识更多的人。所以我想我唯一的选择是使外键名称不同。 – 2010-07-28 04:56:47

fk_family_documents

fk_family_contact

设置外键名像做它的上面是一个办法,我不知道这是别名,但高雅。下面是一个例子语法,如果要添加它作为一个约束:

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

当然,您可能需要量身打造,但应该给你的怎么会是设置的想法。

我遇到了同样的问题,没有真正注意到任何好的解决方案。我最初想保持我的外键名称与他们引用的主键相同,以使自然连接成为可能。所以我会将我的外键重命名为{reference_primary_key} _1,{reference_primary_key} _2等。

+0

,它显然不是一个错误(来自mysql文档): – targnation 2010-11-29 23:05:25

+2

如果给出CONSTRAINT符号子句,则符号值在数据库中必须是唯一的。如果没有给出该子句,InnoDB将自动创建该名称。 – targnation 2010-11-29 23:05:40

+0

http://dev.mysql.com/doc/refman/5.0/en/innodb-foreign-key-constraints.html – targnation 2010-11-29 23:06:01