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

标签 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_bvarchar 类型,并仍然引用 enum 以确保只有适当 的有效值>enum 被写入其中?

最佳答案

据我从理论和实践来看,现在不可能。另外,official documentation FOREIGN 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 可能值列表父表和子表中的内容不必相同。因此,我怀疑即使您可以使用 VARCHAR,它也不会以任何方式帮助您检查或强制值完整性。

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

关于mysql - 使用 MySql 从 varchar 到 enum 字段的外键约束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32943272/

相关文章:

mysql - 如何使值的组合在 mySQL 表中唯一,无论它们的顺序如何?

sql-server - SQL Server 约束允许 "two unique"值

java - 是否可以在 Java 枚举中实现一种命名空间形式?

c# - 从 IronPython 中的其他命名空间访问 C# 枚举和类

mysql - 类型接口(interface)的 channel 在带有 MySql 的 golang 中不接收值

php - Mysql 查询和对几列进行排序

java - 为什么允许 `enum of enum of enum..`?

MySQL,错误150

mysql - perl脚本同时连接两个数据库

java - 服务器 IO 瓶颈 - 如何减少数据库读/写并仍然保留我的数据?