我的要求
一个表需要维护一个状态列。
该列代表5种状态之一。
初步设计
我想我可以将其设为整数列,并使用数值表示状态。
0 =开始 1 =跑步 2 =坠毁 3 =暂停 4 =停止 由于我不希望我的应用程序维护从整数到其字符串描述的映射,因此我计划将它们放置在单独的状态描述表中(依赖于FK关系)。
然后我发现MySQL的ENUM类型与我的要求完全匹配。除了直接依赖MySQL外,使用ENUM类型还有什么陷阱吗?
更改ENUM中的值集需要使用ALTER TABLE,这可能会导致表重组-一项非常昂贵的操作(如果仅在ENUM定义的末尾添加一个新值,但如果删除一个新值,则不会发生表重组。 ,或更改顺序,它会进行表重组)。而更改查找表中的值集就像INSERT或DELETE一样简单。
无法将其他属性与ENUM中的值相关联,例如哪些属性将被淘汰,哪些属性有资格放入用户界面的下拉列表中。但是,查找表可以包含此类属性的其他列。
查询ENUM以获取不同值的列表非常困难,基本上需要您从查询数据类型定义INFORMATION_SCHEMA,并从返回的BLOB中解析该列表。您可以SELECT DISTINCT status从表中尝试,但是只能获取当前正在使用的状态值,该值可能不是ENUM中的所有值。但是,如果将值保留在查找表中,则很容易查询,排序等。
如您所知,我不是ENUM的忠实拥护者。:-)
CHECK约束也是如此,该约束只将列与一组固定值进行比较。尽管MySQL仍然不支持CHECK约束。
更新:MySQL 8.0.16现在实现了CHECK约束。来源:stack overflow
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。