Postgresql enum Каковы преимущества и недостатки? - PullRequest
20 голосов
/ 23 февраля 2010

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

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

Ответы [ 4 ]

34 голосов
/ 24 февраля 2010

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

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

Недостатки:

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

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

Однако, если вас не волнует читаемость, int так же хорош, как enum.

0 голосов
/ 14 июня 2017

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

0 голосов
/ 11 ноября 2016

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

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