我很少看到 ENUM 数据类型在野外使用;开发人员几乎总是只使用如下所示的辅助表:
CREATE TABLE officer_ranks (
id int PRIMARY KEY
,title varchar NOT NULL UNIQUE);
INSERT INTO officer_ranks VALUES (1,'2LT'),(2,'1LT'),(3,'CPT'),(4,'MAJ'),(5,'LTC'),(6,'COL'),(7,'BG'),(8,'MG'),(9,'LTG'),(10,'GEN');
CREATE TABLE officers (
solider_name varchar NOT NULL
,rank int NOT NULL REFERENCES officer_ranks(id) ON DELETE RESTRICT
,serial_num varchar PRIMARY KEY);
但同样的事情也可以使用用户定义的类型/ENUM 来显示:
CREATE TYPE officer_rank AS ENUM ('2LT', '1LT','CPT','MAJ','LTC','COL','BG','MG','LTG','GEN');
CREATE TABLE officers (
solider_name varchar NOT NULL
,rank officer_rank NOT NULL
,serial_num varchar PRIMARY KEY);
(示例使用 PostgreSQL,但其他 RDBMS 也有类似的语法)
我认为使用 ENUM 的最大缺点是从应用程序内部更新更加困难。这也可能会让习惯于将 SQL DB 简单地用作位存储桶的缺乏经验的开发人员感到困惑。
假设信息大部分是静态的(工作日名称、月份名称、美国陆军军衔等),使用 ENUM 有什么优势吗?