【问题标题】:Foreign key constraint from varchar to enum field using MySql使用 MySql 从 varchar 到枚举字段的外键约束
【发布时间】:2015-10-05 07:27:06
【问题描述】:

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

`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 的有效值?

【问题讨论】:

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


    【解决方案1】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-25
      • 1970-01-01
      • 2014-02-06
      • 2011-01-01
      • 2014-06-01
      相关资源
      最近更新 更多