Преимущества и недостатки использования типов ENUM vs Integer?

Давайте скажем в какой-то случайной таблице, у вас есть столбец с именем status . Это значения реального мира будут либо включены , либо отключены .

Лучше ли для типа данных этого столбца быть int /bool (1 или ноль) или использовать ENUM, при этом значения enabled и отключены? Каковы преимущества или недостатки?

Скажем, вместо двух действительных статусов у вас есть 4 или 10 или даже больше? Содействуют ли преимущества и недостатки с одной стороны или другой, когда увеличивается количество требуемых значений?

94 голоса | спросил Jake Wilson 19 +04002011-10-19T19:50:08+04:00312011bEurope/MoscowWed, 19 Oct 2011 19:50:08 +0400 2011, 19:50:08

3 ответа


56

Я нашел очень странный, но информативный статью о 8 причинах, по которым нельзя использовать ENUM.

Даже без статьи я знаю

ответил RolandoMySQLDBA 19 +04002011-10-19T20:25:19+04:00312011bEurope/MoscowWed, 19 Oct 2011 20:25:19 +0400 2011, 20:25:19
31

Ну, во-первых, у нас есть требования к хранилищу . Я предполагаю, что вы имели в виду tinyint (вместо int).

  • ENUM принимает 1 байт (если под 255 значениями) или 2 байта (до 65535
  • TinyInt принимает 1 байт (максимум 255 значений)
  • Boolean является синонимом TinyInt

Итак, на первый взгляд, они все одинаковые. ENUM обрабатывает некоторые метаданные для связанного с ним строкового значения ( старше src )

Я бы сказал, что добавив больше значений, любое преимущество начинает отходить от ENUM. Особенно, если вы добавите значения после того, как таблица уже используется, потому что вам нужно изменить структуру таблицы для размещения.

В чем преимущество использования ENUM? Строковое представление того, что означает значение. Вот и все, что касается меня. Насколько это важно, зависит от вашего приложения.

ответил Derek Downey 19 +04002011-10-19T20:20:27+04:00312011bEurope/MoscowWed, 19 Oct 2011 20:20:27 +0400 2011, 20:20:27
17

Я нахожу, что ENUM - это краткое определение таблицы кодов. Его главным преимуществом является то, что он избегает кода, необходимого для соединения и отображения описания кода. Он также упрощает установку значений, если они поступают в строчную форму.

Я считаю, что он имеет следующие недостатки:

  • Нет возможности для дополнительных метаданных о коде.
  • Трудно добавлять или отключать значения. (Отключить коды можно с помощью триггера и поля истечения срока действия.)
  • I18n в базе данных не может быть выполнено.
  • Нельзя повторно использовать таблицы.
ответил BillThor 22 +04002011-10-22T16:51:48+04:00312011bEurope/MoscowSat, 22 Oct 2011 16:51:48 +0400 2011, 16:51:48

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132