我对表中的字段使用了 ENUM 数据类型,但其值不固定,将来可能会更改。那么要实现的 ENUM 字段的替代解决方案是什么?
要么采用参考表,要么将列设为 varchar 或 integer?
当您说值将来可能会发生变化时,我认为您回答了自己的问题:您必须切换到将数据存储在中央位置一次的方法(而不是分散在整个数据库中);换句话说,一个主表。
另一个好处是,更改值不需要 DDL 命令 ( ALTER TABLE),而是需要简单的 DML 命令 ( 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),
);
Run Code Online (Sandbox Code Playgroud)
...被替换为:
CREATE TABLE car (
car_id INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
plate VARCHAR(20) NOT NULL,
color_id INT(10),
PRIMARY KEY (car_id),
CONSTRAINT car_fk1 FOREIGN KEY (color_id) REFERENCES color (color_id)
);
CREATE TABLE color (
color_id INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
name VARCHAR(50) NOT NULL,
PRIMARY KEY (color_id),
UNIQUE INDEX name (name)
);
Run Code Online (Sandbox Code Playgroud)
不用说,您可以在任何其他具有颜色的实体中重用颜色定义。
| 归档时间: |
|
| 查看次数: |
4213 次 |
| 最近记录: |