我已經在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_ID
和contact_familyID
,document_familyID
的行在聯繫人和文檔表中引用它時使用了某些內容。
就我所知,命名它們唯一的缺點是,在進行連接時,不能僅僅通過列名來引用它們,必須將它們別名或通過tablename.columnname引用它們。
編輯:我想我已經找到你的意思了,因爲不能具有相同的名稱。當您在單個表格中添加外鍵關係時,就是這種情況,如下所述:http://bugs.mysql.com/bug.php?id=46363
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等。
,它顯然不是一個錯誤(來自mysql文檔): – targnation 2010-11-29 23:05:25
如果給出CONSTRAINT符號子句,則符號值在數據庫中必須是唯一的。如果沒有給出該子句,InnoDB將自動創建該名稱。 – targnation 2010-11-29 23:05:40
http://dev.mysql.com/doc/refman/5.0/en/innodb-foreign-key-constraints.html – targnation 2010-11-29 23:06:01
- 1. 與外鍵相同的表
- 2. 多個外鍵同主鍵表
- 3. 同一表中有多個外鍵
- 4. Django的:如何有多個外鍵,引用相同的表中的一個表
- 5. 外鍵相同的表中的SQLAlchemy
- 6. 外鍵參考相同表
- 7. 在表中兩次相同的外鍵
- 8. 外鍵:單字段引用多個字段(相同的表)
- 9. 加入具有相同外鍵的多個表
- 10. 兩個相連的表中有相同的記錄具有相同的外鍵
- 11. 多個表相同的主鍵
- 12. 外鍵相同的主鍵
- 13. SQL,兩個外鍵引用另一個表的相同主鍵
- 14. 取決於相同主鍵的多個外鍵
- 15. Linq to SQL多個外鍵到相同的主鍵 - visual studio intellisense
- 16. 通過多個外鍵排序相同表
- 17. QSqlRelationalTableModel - 兩個引用同一個表,相同的外鍵
- 18. 加入到表中有兩個或多個記錄具有相同的外鍵
- 19. 雄辯的外鍵相同的表
- 20. 在.Net Core/EF Core中設置多個相同類的外鍵
- 21. SQL多個外鍵與多個表上的單個外鍵
- 22. MySQL使用相同的外鍵爲兩個不同的表列
- 23. nhibernate joinqueryover無關表(相同的外鍵)
- 24. 與關聯表相同的外鍵?
- 25. 多個外鍵許多表
- 26. 引用同一個表的一列中的多個外鍵
- 27. MySQL中的MusicDB對同一個表的多個外鍵
- 28. 多個外鍵同桌
- 29. mySQL - 多個表的外鍵?
- 30. 多個表的外鍵
是的,您發佈的鏈接就是我所說的。我用工作臺來創建我的表,當我去出口到SQL爲了創建數據庫和表我得到了它引用的錯誤。我想這似乎是「應該」更清潔,列名相同。但我並不是很擅長數據庫設計和實現,所以我想問一些知識更多的人。所以我想我唯一的選擇是使外鍵名稱不同。 – 2010-07-28 04:56:47