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

Foreign key constraint from varchar to enum field using MySql

假设我的 MySql 数据库中已有一个 table。这个 table 有一个定义如下的字段:

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

现在我想用 field_b 定义另一个 table。由于外键约束,field_b 应该引用 field_a。将 field_b 定义为精确的 enum 类型,如 field_a 接缝是多余的。有没有办法使 field_b 类型为 varchar 并仍然引用 enum 以确保只写入适当的 enum 的有效值?

据我所知,从理论和实践来看,现在不可能了。此外,official documentationFOREIGN KEY 状态:

Corresponding columns in the foreign key and the referenced key must have similar data types.

现在,虽然 ENUMVARCHAR 都归类为 string types,但它们不被视为相似的数据类型。 (至少对于这个目的来说足够相似)。我通过实验发现与 ENUM 相似的数据类型中只有一种是 SET。但即使在使用引用 ENUM-to-ENUMENUM-to-SET 父子 table 中的可能值列表的情况下必须相同。所以我怀疑即使您可以使用 VARCHAR,它也不会以任何方式帮助您检查或强制值的完整性。

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