Я очень редко вижу типы данных 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 просто как ведро.
Если предположить, что информация в основном статическая (названия дней недели, названия месяцев, звания армии США и т. Д.), Есть ли какое-либо преимущество в использовании ENUM?