2010-02-23 4 views
15

Где я работаю, мы используем базу данных postgres (8.3 скоро для перехода на 8.4). В настоящее время существует небольшая дискуссия об использовании перечислений в базе данных. Лично мне не нравится тип перечисления db. Среди прочего он ставит логику приложения в базу данных и создает возможность для несоответствия между кодом и данными.Postgresql перечисление, какие преимущества и недостатки?

Мне было интересно, какие именно преимущества перечислений postgres (помимо чтения) и каковы недостатки?

ответ

22

Преимущества перечислений являются:

  • Производительность лучше. Вы можете просто отобразить то, что вы получаете из основной таблицы, вместо того, чтобы иметь отдельную таблицу поиска, которая преобразует код в значение или имеет логику приложения, которая преобразует код в значение. Это может быть особенно полезно в приложениях datawarehouse.
  • Специальная SQL легче написать

К недостаткам можно отнести:

  • дисплей Кодирование значения в вашей DDL базы данных является плохой форме. Если вы переводите значение перечисления в другое отображаемое значение в своем коде приложения, вы потеряли много преимуществ использования перечислений.
  • Добавление значений требует DDL изменений
  • делает язык локализации трудный
  • Database портативность уменьшается
+3

Если вы определяете значения, которые управляют, изменит поведение вашего приложения, то, безусловно, «добавление значений требует изменений DDL» является преимуществом? В противном случае вы рискуете, по-видимому, безобидные операции с базами данных, нарушающие ваше приложение. – thsutton

2

Enums сочетает в себе преимущества ints с преимуществами строк: они маленькие и быстрые, такие как ints, читаемые как строки, и имеют дополнительное преимущество в безопасности (вы не можете ошибаться в перечислении перечисления).

Однако, если вы не заботитесь о читаемости, значение int равно как перечисление.

0

Как преимущество вы также DB проверки, что ничто иное значение перечисления не может быть записан в колонке. Большим недостатком для меня было то, что перечисление могло быть изменено только путем добавления стоимости до конца, но поскольку Postgres 9.1 было в прошлом: https://stackoverflow.com/a/7834949/548473

-1

Точка, если приложениям разрешено делать DDL, они более вероятны вызвать блокировку или конфликт. DDL лучше всего делать автономно, то есть в однопользовательском режиме.

Смежные вопросы