【发布时间】:2011-05-16 15:52:15
【问题描述】:
我很少看到 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 是否有任何优势?
【问题讨论】:
-
@PeterEisentraut noit 不是重复的。你的帖子只是关于枚举,这是关于枚举与外键
标签: sql database-design postgresql