Допустим, в некоторой случайной таблице у вас есть столбец с именем status . Это реальные значения будут либо включены, либо отключены .
Лучше ли, чтобы тип данных этого столбца был int / bool (1 или ноль) или использовался ENUM
со значениями enabled
и disabled
? Каковы преимущества или недостатки?
Допустим, вместо двух действительных статусов у вас есть 4 или 10 или даже больше? Влияют ли преимущества и недостатки на ту или иную сторону по мере увеличения количества требуемых значений?
mysql
database-design
datatypes
Джейк Уилсон
источник
источник
Ответы:
Я нашел очень странную, но информативную статью о 8 причинах, почему не стоит использовать ENUM.
Даже без статьи я знаю
источник
units
модель для магазина предметов, где каждая запись должна иметь свойство для связанных с ней единицcomposition
. т.е.Ну, во-первых, у нас есть требования к хранению . Я собираюсь предположить, что вы имели в виду tinyint (вместо int).
Итак, на первый взгляд, они все одинаковые. ENUM использует некоторые метаданные для строкового значения, связанного с ним ( более ранний src )
Я бы сказал, что по мере того, как вы добавляете больше ценностей, любое преимущество начинает отклоняться
ENUM
. Особенно, если вы добавляете значения после того, как таблица уже используется, потому что вы должны изменить структуру таблицы, чтобы приспособить ее.В чем преимущество использования
ENUM
? Строковое представление того, что означает значение. Вот и все, насколько я понимаю. Насколько это ценно, зависит от вашего приложения.источник
Я считаю, что ENUM - это краткое определение таблицы кодов. Его главное преимущество заключается в том, что он избегает кода, необходимого для присоединения и отображения описания кода. Это также облегчает установку значений, если они поступают в виде строки.
Я считаю, что это имеет следующие недостатки:
источник