MySQL 中 ENUM 数据类型的替代方案

Nar*_*iya 2 mysql database

我对表中的字段使用了 ENUM 数据类型,但其值不固定,将来可能会更改。那么要实现的 ENUM 字段的替代解决方案是什么?

要么采用参考表,要么将列设为 varchar 或 integer?

Álv*_*lez 5

当您说值将来可能会发生变化时,我认为您回答了自己的问题:您必须切换到将数据存储在中央位置一次的方法(而不是分散在整个数据库中);换句话说,一个主表。

另一个好处是,更改值不需要 DDL 命令 ( ALTER TABLE),而是需要简单的 DML 命令 ( INSERT INTOUPDATE)。这甚至允许编写一个简单的管理程序。

例如:

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)

不用说,您可以在任何其他具有颜色的实体中重用颜色定义。