Перечисления не идеальны, но они waaaay лучше, чем ваше альтернативное предложение использовать VARCHAR и использовать одно из нескольких возможных значений!
Перечисления хранят свои данные в виде чиселзначение.Это идеально подходит для хранения поля с ограниченным набором возможных значений, таких как «да» или «нет», поскольку оно использует минимальный объем пространства и обеспечивает максимально быстрый доступ, особенно для поиска.
Перечисления перечисляются в том случае, если вам позже потребуется добавить дополнительные значения в список.Допустим, вам нужно иметь «возможно», а также «да» или «нет».Поскольку оно хранится в перечислении, это изменение требует изменения базы данных.Это плохо по нескольким причинам - например, если у вас большой набор данных, восстановление таблицы может занять значительное время.
Решение этой проблемы - использовать связанную таблицу, котораяхранит список возможных значений, и ваше исходное поле теперь будет просто содержать ссылку на идентификатор вашей новой таблицы, а запросы сделают соединение с таблицей поиска, чтобы получить строковое значение.Это называется «нормализацией» и считается хорошей практикой работы с базами данных.Это классический сценарий реляционной базы данных с большим количеством этих справочных таблиц.
Очевидно, что если вы достаточно уверены, что поле никогда не будет хранить ничего, кроме «да» или «нет», то это может бытьИзлишне иметь целую дополнительную таблицу для нее, и может быть уместно перечисление.
Некоторые продукты баз данных даже не предоставляют тип данных enum
, поэтому, если вы используете эти БД, вы вынуждены использоватьрешение таблицы поиска (или просто простое числовое поле и сопоставление значений в вашем приложении).
Что никогда уместно в этой ситуации, это использовать фактическое строковое значение в таблице,Это считается крайне плохой практикой.
VARCHARS занимают гораздо больше места на диске, чем числовые значения, используемые перечислением.Их также медленнее читать и медленнее искать в запросе.Кроме того, они снимают принудительное применение фиксированных значений, предусмотренных enum
.Это означает, что ошибка в вашей программе может привести к тому, что в данные попадут недопустимые значения, а также может произойти непреднамеренное обновление с использованием PHPMyAdmin или аналогичного инструмента.
Надеюсь, это поможет.