使用MySql从varchar到enum字段的外键约束

时间:2015-10-05 07:27:07

标签: mysql enums constraints foreign-key-relationship varchar

假设我的MySql数据库中已存在一个表。该表有一个字段,其定义如下:

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

现在我想用field_b定义另一个表格。由于外键约束,field_b应该引用field_a。将field_b定义为完全enum类型,如field_a接缝是多余的。有没有办法让field_b类型varchar仍然引用enum以确保只有相应enum的有效值写入其中?< / p>

1 个答案:

答案 0 :(得分:2)

据我所知,从理论和实践来看,现在不可能。另外,official documentationFOREIGN KEY表示:

  

外键和引用键中的对应列必须   有类似的数据类型。

现在,虽然ENUMVARCHAR都归类为string types,但它们不被视为类似的数据类型。 (至少与此目的相似)。我实验发现只有一种与ENUM类似的数据类型是SET。但即使在使用引用ENUM - 至 - ENUMENUM - 至 - SET父表和子表中可能值的列表,也不一定是相同。因此,我怀疑即使您可以使用VARCHAR,它也无法以任何方式帮助您检查或强制值完整性。

我建议使用查找表而不是ENUM。它是更灵活的解决方案,并且表格的元数据冗余更少。