Я очень редко вижу типы данных ENUM, используемые в дикой природе; разработчик почти всегда просто использует вторичную таблицу, которая выглядит так:
CREATE TABLE officer_ranks (
id int PRIMARY KEY
,title varchar NOT NULL UNIQUE);
INSERT INTO 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, но другие РСУБД имеют аналогичный синтаксис)
Самый большой недостаток, который я вижу в использовании ENUM, заключается в том, что его сложнее обновлять из приложения. И это может также запутать неопытного разработчика, который использовал SQL DB просто как бит-ведро.
Предполагая, что информация в основном статична (названия дней недели, имена месяцев, ряды армии США и т.д.), есть ли какое-либо преимущество в использовании ENUM?