我已将ENUM数据类型用于表中的字段,但其未修复的值可能会在将来更改。那么ENUM字段的替代解决方案是什么呢?
获取引用表还是使列varchar或整数?
答案 0 :(得分:2)
当你说未来的价值可能发生变化时,我认为你回答了自己的问题:你必须转而采用一种方法,将数据存储在一个中心位置(而不是分散在整个数据库中);换句话说,一个主表。
额外的好处是对值的更改不需要DDL命令(0
),而是简单的DML命令(ALTER TABLE
,INSERT INTO
)。这甚至可以写一个简单的管理。
例如:
UPDATE
......被替换为:
CREATE TABLE car (
car_id INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
plate VARCHAR(20) NOT NULL,
color ENUM('White', 'Black', 'Red', 'Blue'),
PRIMARY KEY (car_id),
);
毋庸置疑,您可以在任何其他具有颜色的实体中重复使用颜色定义。
答案 1 :(得分:0)
我喜欢使用varchar,然后在映射到正确值的代码中声明常量。我经常也会在列的注释中列出可能的值及其含义。
使用varchar的效率低于使用tinyint(就像Aju John在他的评论中所建议的那样),但除非我正在处理一个真正的性能关键或巨大的表 - 我发现它更容易处理。它允许我在手动选择表中的数据和调试代码时理解实际值(即,如果我使用整数列,则不记住每个数字的含义),并且在大多数情况下,效率和便利之间的权衡是非常值得。