假设我的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>
答案 0 :(得分:2)
据我所知,从理论和实践来看,现在不可能。另外,official documentation到FOREIGN KEY
表示:
外键和引用键中的对应列必须 有类似的数据类型。
现在,虽然ENUM
和VARCHAR
都归类为string types,但它们不被视为类似的数据类型。 (至少与此目的相似)。我实验发现只有一种与ENUM
类似的数据类型是SET
。但即使在使用引用ENUM
- 至 - ENUM
或ENUM
- 至 - SET
父表和子表中可能值的列表,也不一定是相同。因此,我怀疑即使您可以使用VARCHAR,它也无法以任何方式帮助您检查或强制值完整性。
我建议使用查找表而不是ENUM
。它是更灵活的解决方案,并且表格的元数据冗余更少。