Использует mysql ENUM плохое архитектурное решение?

Для меня это похоже на использование жестко заданных значений вместо постоянных переменных в коде приложения. Но есть разные мнения. Поэтому я не могу точно решить.

P.S. В рамках данного вопроса предположим, что производительность не является проблемой.

Ответ 1

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

Ответ 2

Это в значительной степени зависит от реальной ситуации, но в первую очередь речь идет о точках типов столбцов, чтобы точно определить, какие значения допустимы, а какие нет. Если в вашей проблемной области атрибут, который вы планируете хранить как значение ENUM, фиксирован в том смысле, что он не может иметь другие значения, тогда ENUM - отличный выбор. Примером этого может быть пол: ENUM('male', 'female') отлично, потому что шанс добавления третьего пола будет очень низким.

Если вы сохраняете значения, которые с большей вероятностью будут изменены, вы можете вместо этого изменить нормализацию своей модели данных на отношения "много-к-одному".

Ответ 3

ENUM отлично подходит для данных, которые, как вы знаете, попадают в статический набор.

Если вы используете Mysql 5+, почти всегда лучше с типом ENUM для данных в статический набор, как показывает официальная ссылка MySQL. Не говоря уже о том, что данные читаемы, и у вас есть дополнительный уровень проверки.

Если вы хотите знать, будет ли использование ENUM оптимизацией, я рекомендую использовать ПРОЦЕДУРА АНАЛИЗА. Это порекомендует правильный тип данных для ваших столбцов.

Ответ 4

Ни в коем случае! Они имеют несколько преимуществ перед числовым полем:

  • Они более читаемы: UPDATE Person SET state = 2 - Что означает 2?
  • У них ограниченный диапазон: если у вас есть только 10 состояний для человека, зачем допускать числовые значения 11 +?
  • Они могут использоваться так же, как их числовая часть счетчика: UPDATE person SET state = state + 1

Фактически, использование числовых значений вместо перечислений подобно помещению констант в исходный код.