2015-10-05 71 views
1

假設我在我的MySql數據庫中有一個已經存在的表。此表都有一個這樣定義一個字段:使用MySql從varchar到枚舉字段的外鍵約束

`field_a` enum('value_1', 'value_2', 'value_3') 

現在我想定義與field_b另一個表。由於外鍵約束,field_b應該引用field_a。將field_b定義爲確切的enum類型,例如field_a接縫是冗餘的。有沒有辦法制作varchar類型的field_b,並仍然參考enum以確保只有合適的enum的有效值寫入其中?

回答

2

據我所知,從理論和實踐來看,現在是不可能的。此外,official documentationFOREIGN KEY狀態:

外鍵對應的列和被引用的密鑰必須 有類似的數據類型。

現在,雖然ENUMVARCHAR都被歸類爲string types,他們並不認爲類似的數據類型。 (至少與此類似的情況相似)。只有一個我實驗發現與ENUM類似的數據類型是SET。但是,即使在使用參考ENUM - 至ENUMENUM - 至SET的情況下,父表和子表中的可能值列表也不必相同。所以我懷疑即使你可以使用VARCHAR,它也不會以任何方式幫助你檢查或強制值的完整性。

我會推薦使用查找表而不是ENUM。這是更靈活的解決方案,並且減少了表格元數據的冗餘。