Нормализация базы данных MySQL - PullRequest
20 голосов
/ 27 октября 2011

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

Например:

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

Спасибо, G

Ответы [ 3 ]

25 голосов
/ 27 октября 2011

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

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

Единственные минусы, которые мне известны, это

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

НТН

С

1 голос
/ 27 октября 2011

Еще одна вещь, которую следует учитывать ...

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

0 голосов
/ 27 октября 2011

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

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

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

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

...