2010-07-28 153 views
4

我已經在SO上看過帖子,並且通過google表明,使用Mysql你不能擁有多個同名的外鍵。我的問題是我如何引用多個其他表中的一個表中的同一列。在我的情況下,我有一個FAMILY表,其中包含FAM_ID。我希望這是我的DOCUMENTS和CONTACT表中的外鍵,因爲這些行中的行與FAM_ID有關係。所以如果我明白我讀的是正確的,我需要在DOCUMENTS中命名該列並聯系不同的名稱(比FAM_ID),以便將它們映射爲FAMILY表中的FAM_ID的外鍵。我只是不理解某些東西,或者這是我唯一的選擇嗎?這似乎是數據模型的一個相當常見的要求。多個表中的相同外鍵

回答

2

你不需要命名他們不同的東西。您可以有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

1

fk_family_documents

fk_family_contact

設置外鍵名像做它的上面是一個辦法,我不知道這是別名,但高雅。下面是一個例子語法,如果要添加它作爲一個約束:

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

當然,您可能需要量身打造,但應該給你的怎麼會是設置的想法。

0

我遇到了同樣的問題,沒有真正注意到任何好的解決方案。我最初想保持我的外鍵名稱與他們引用的主鍵相同,以使自然連接成爲可能。所以我會將我的外鍵重命名爲{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