-
Промяната на набора от стойности в ENUM изисква
ALTER TABLE
което може да доведе до преструктуриране на таблицата - невероятно скъпа операция (преструктурирането на таблицата не се случва, ако просто добавите една нова стойност в края на дефиницията на ENUM, но ако изтриете такава или промените реда, тя прави таблица преструктуриране). Докато промяната на набора от стойности в справочна таблица е толкова проста, колкото INSERT или DELETE. -
Няма начин да се свържат други атрибути със стойностите в ENUM, като например кои са оттеглени и кои отговарят на условията за поставяне в падащ списък във вашия потребителски интерфейс. Въпреки това, справочната таблица може да включва допълнителни колони за такива атрибути.
-
Много е трудно да се направи заявка за ENUM, за да се получи списък с различни стойности, което основно изисква от вас да потърсите дефиницията на типа данни от
INFORMATION_SCHEMA
и се върна синтактичен анализ на списъка от BLOB. Можете да опитатеSELECT DISTINCT status
от вашата таблица, но това получава само стойности на състоянието, които се използват в момента, които може да не са всички стойности в ENUM. Въпреки това, ако съхранявате стойности в справочна таблица, е лесно да правите заявки, сортиране и т.н.
Не съм голям фен на ENUM, както можете да кажете. :-)
Същото важи и за ограниченията CHECK, които просто сравняват колона с фиксиран набор от стойности. Въпреки че MySQL така или иначе не поддържа CHECK ограничения.
Актуализация:MySQL 8.0.16 вече прилага ПРОВЕРКА ограничения .