Подтвердить что ты не робот

Нормализация базы данных MySQL

Должен ли я выполнять нормализацию базы данных чтения (используя таблицы соединений) или использовать тип ENUM для статических или динамических данных?

Например:

У меня есть таблица USER с user_status. Должен ли я создать таблицу a status или создать список ENUM со статусами?

Спасибо G

4b9b3361

Ответ 1

IMHO, расширение enum значительно упрощает встраивание семантики в таблицу, а также повышает эффективность:

  • уменьшение количества подключений, необходимых для запроса
  • сокращение количества открытых таблиц в СУБД

Единственными минусами, о которых я знаю, является

  • тип ENUM не реализуется другой СУБД
  • если вы решите добавить дополнительные значения в ENUM, установленные позднее, вы применяете обновление DDL - это может занять много времени с очень большой таблицей

НТН

С.

Ответ 2

Другой материал, который следует учитывать...

Перечисление может быть обновлено только через модификацию структуры базы данных в другом месте, связанная таблица позволяет динамическое создание записи.

Ответ 3

Это зависит от архитектуры и многих других факторов.

Например, вы не разрешаете чтение/запись данных, кроме использования хранимых процедур. В этом случае вы можете свободно использовать тип данных "tinyint". Если вы разрешаете чтение/запись с прямыми запросами, лучше использовать ограничение, то есть ENUM, чтобы избежать неправильных статусов (если пользовательский интерфейс или внутренний сервер могут поставить этот "неправильный" статус, конечно).

С другой стороны (и это возможно) могут произойти изменения в потоке данных, и, возможно, вам нужно будет добавить новые статусы. В этом случае вам понадобится: 1) ничего не делать, если у вас есть статический тип данных; 2) измените, если у вас есть ENUM.

Итак... мой ответ: это зависит от вашего приложения и ваших требований.