我很少看到在野外使用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);
但同样的事情也可以使用用户定义的类型/枚举来显示:
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具有类似的语法)
我认为使用枚举的最大缺点是,从应用程序内部进行更新更加困难.而且,这也可能会让一个习惯于将SQL DB简单地当作一个小桶来使用的缺乏经验的开发人员感到困惑.
假设信息大多是静态的(工作日名称、月份名称、美国陆军军衔等),使用枚举有什么优势吗?