Postgresql перечисляет, какие преимущества и недостатки?
Где я работаю, мы используем базу данных postgres (8.3 скоро для перехода на 8.4). В настоящее время существует небольшая дискуссия об использовании перечислений в базе данных. Лично мне не нравится тип перечисления db. Среди прочего он ставит логику приложения в базу данных и создает возможность для несоответствия между кодом и данными.
Мне было интересно, в чем преимущества преимуществ postgres enums (кроме чтения) и каковы недостатки?
Ответы
Ответ 1
Преимущества перечислений:
- Производительность лучше. Вы можете просто отобразить то, что вы получаете из основной таблицы, вместо того, чтобы иметь отдельную таблицу поиска, которая преобразует код в значение или имеет логику приложения, которая преобразует код в значение. Это может быть особенно полезно в приложениях datawarehouse.
- Специальный SQL легче писать
Недостатки:
- Кодирование отображаемых значений в вашей базе данных ddl - плохая форма. Если вы переводите значение перечисления в другое отображаемое значение в вашем коде приложения, вы потеряли много преимуществ использования перечислений.
- Добавление значений требует изменений DDL
- затрудняет локализацию языка
- Переносимость базы данных уменьшается
Ответ 2
Перечисления объединяют преимущества int с преимуществами строк: они маленькие и быстрые, такие как ints, читаемые как строки, и имеют дополнительное преимущество быть в безопасности (вы не можете неправильно использовать перечисление).
Однако, если вы не заботитесь о читаемости, int также хорош как перечисление.
Ответ 3
В качестве преимущества у вас также есть проверка БД, что ничто другое значение enum не может быть записано в столбце. Большим недостатком для меня было то, что enum можно было изменить только добавлением ценности до конца, но поскольку Postgres 9.1 это в прошлом: fooobar.com/questions/58527/...
Ответ 4
Точка, если приложениям разрешено делать DDL, они, скорее всего, вызовут блокировку или конфликт. DDL лучше всего делать автономно, то есть в однопользовательском режиме.