Чому ENUM зло
У більшості випадків є альтернатива ENUM:

То чому ENUM – зло?
1. З даними звертаються не як з даними
У разі ENUM дані технічно переміщені з місця, відведеного під їх зберігання (поля бази даних) в інше місце метадані визначення стовпця.
Є різниця між тим, що тип стовпця обмежує дані (числовий стовпець може містити лише ціле число) і тим, що ENUM насправді зберігається частина даних.
Коротше кажучи, стовпчик ENUM порушує правила нормалізації. Це може здатися академічним підходом, але насправді є ще безліч інших причин.
2. Зміна списку значень ENUM коштує дорого
Спочатку ви думаєте, що за жодних обставин не доведеться змінювати список значень. Але люди помиляються. Хтось випускає новий вид продукту, ваша компанія пропонує ще один спосіб доставки, а Північна Америка врізається в Азію.
Проблема в тому, що зміна списку ENUM має на увазі реструктуризацію всієї таблиці за допомогою ALTER TABLE, що дуже дорого за ресурсами та часом.
На невеликій таблиці ця операція безболісна, але на великій вимагатиме значних ресурсів. А якщо використовувати довідкову таблицю замість ENUM, то зміна цього списку буде так само просто, як INSERT, UPDATE та DELETE.
3. Неможливо додати додаткову інформацію
Немає жодного правильного способу додати пов'язану зі списком ENUM додаткову інформацію. Що потрібно зробити, якщо на додаток до назви континенту потрібно зберегти його площу? У довідковій таблиці такої проблеми немає. ENUM? Забудьте про це.

Також часто потрібен прапор, що означає припинення використання цього варіанта. Наприклад, коли компанія припиняє продаж чорнихгаджетів, довідкову таблицю досить додати стовпець is_discontinued . При цьому все ще можна зберігати інформацію про всі старі чорні гаджети! Спробуйте зробити це з ENUM!
4. Отримання списку унікальних значень ENUM – біль
Найчастіше потрібно заповнити список, що випадає, можливими значеннями з бази даних, наприклад «Виберіть колір».
Якщо колір зберігаються у довідковій таблиці, це досить просто: SELECT * FROM colors. . Достатньо змінити довідкову таблицю, щоб у списку, що випадає, були потрібні значення.
Злий ENUM: як отримати список кольорів? Звичайно, можна запросити різні значення ENUM з таблиці, але цей список буде не повним - він не матиме всіх можливих значень.
Ви можете запросити дані з INFORMATION_SCHEMA і розібрати отримані результати, але це дуже складно. Насправді немає жодного елегантного способу вилучення список значень колонки ENUM чисто на SQL.
5. Тип ENUM має дуже незначний ефект у оптимізації
Звичайні причини використання ENUM: збільшення продуктивності, іноді спрощення складної моделі.
Давайте розберемося з продуктивністю.
Це важливо пам'ятати, оскільки розробники повинні прагнути повністю нормалізованої бази даних, і вдаватися до денормалізацію тільки при серйозних проблемах з продуктивністю.
Якщо ви боїтеся, що довідкова таблиця гальмуватиме, спочатку протестуйте додаток на реальному наборі даних (або досить реалістичному тестовому). І не треба автоматично припускати, що об'єднання таблиць буде вузьким місцем. ENUM не завжди помітно швидше за альтернативи.
Другий аргумент за ENUM - це зменшення кількості таблиць та зовнішніх ключів у тому плані, що у великих системах сторонній ефектнормалізації - складність розуміння людиною схеми даних та ускладнення запитів.
Що ж, йдіть вперед і складайте інше візуальне подання вашої моделі даних або ER діаграму, позбавляйтеся зайвої детальності.
6. Не можна використовувати список ENUM в інших таблицях
Немає простого способу повторно список ENUM в інших таблицях. При зміні цього списку потрібно оновити кожну таблицю, яка використовується. З довідковою таблицею таких проблем немає.

7. Тип ENUM має багато підводних каменів
8. Портування ENUM до інших СУБД обмежене
Перелік даних ENUM не входить до стандарту SQL, і вбудована підтримка є тільки у MySQL та кількох інших СУБД: PostgreSQL, MariaDB та Drizzle (останні дві - форки MySQL).
Міграція даних у будь-яку іншу систему вимагатиме додаткових кроків для вирішення проблеми ваших «розумних» перерахувань. Якщо цим займетеся ви, то, безперечно, відчуєте себе менш розумним ніж раніше, а якщо вас буде кілька - ви можете їм не сподобатися.
Як правило, перехід на іншу систему і так не є простою справою, тому не слід ускладнювати цей процес.
Критерії, коли допустимо використовувати перелік
1. Коли набір даних буде незмінний
Не варто забувати, що до звернень може додатись «лікар», а в картковій грі - з'явитися джокер.
І 2 - ніколи не буде потрібна додаткова інформація
Що якщо на додаток до карткових мастей потрібно зберігати їх колір?
І 3 - список містить понад два, але менше 20 варіантів
Що стосується «менше 20»: так, ENUM здатний зберігати до 65 535 значень. Проте понад 20 – громіздко, понад 50 – безумство з погляду управління та роботи.