Является ли использование mysql ENUM плохим архитектурным решением? - PullRequest
13 голосов
/ 14 мая 2009

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

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

Ответы [ 4 ]

10 голосов
/ 14 мая 2009

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

4 голосов
/ 10 апреля 2012

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

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

Если вы хотите знать, будет ли использование ENUM оптимизацией, я рекомендую использовать PROCEDURE ANALYZE . Это будет рекомендовать правильный тип данных для ваших столбцов.

2 голосов
/ 14 мая 2009

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

  • Они гораздо более читабельны: UPDATE Person SET состояние = 2 - Что означает 2?
  • Они имеют ограниченный диапазон: если у вас есть только 10 состояний для человека, зачем разрешать числовые значения 11 +?
  • Их можно использовать так же, как их числовой счетчик: ОБНОВЛЕНИЕ лица SET состояние = состояние + 1

На самом деле использование числовых значений вместо перечислений похоже на помещение констант в исходный код.

2 голосов
/ 14 мая 2009

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...