Нормализация базы данных MySQL
Должен ли я выполнять нормализацию базы данных чтения (используя таблицы соединений) или использовать тип ENUM для статических или динамических данных?
Например:
У меня есть таблица USER
с user_status
. Должен ли я создать таблицу a status
или создать список ENUM со статусами?
Спасибо G
Ответы
Ответ 1
IMHO, расширение enum значительно упрощает встраивание семантики в таблицу, а также повышает эффективность:
- уменьшение количества подключений, необходимых для запроса
- сокращение количества открытых таблиц в СУБД
Единственными минусами, о которых я знаю, является
- тип ENUM не реализуется другой СУБД
- если вы решите добавить дополнительные значения в ENUM, установленные позднее, вы применяете обновление DDL - это может занять много времени с очень большой таблицей
НТН
С.
Ответ 2
Другой материал, который следует учитывать...
Перечисление может быть обновлено только через модификацию структуры базы данных в другом месте, связанная таблица позволяет динамическое создание записи.
Ответ 3
Это зависит от архитектуры и многих других факторов.
Например, вы не разрешаете чтение/запись данных, кроме использования хранимых процедур. В этом случае вы можете свободно использовать тип данных "tinyint". Если вы разрешаете чтение/запись с прямыми запросами, лучше использовать ограничение, то есть ENUM, чтобы избежать неправильных статусов (если пользовательский интерфейс или внутренний сервер могут поставить этот "неправильный" статус, конечно).
С другой стороны (и это возможно) могут произойти изменения в потоке данных, и, возможно, вам нужно будет добавить новые статусы. В этом случае вам понадобится:
1) ничего не делать, если у вас есть статический тип данных;
2) измените, если у вас есть ENUM.
Итак... мой ответ: это зависит от вашего приложения и ваших требований.