#sql #postgresql #types #enums #status
#sql #postgresql #типы #перечисления #Статус
Вопрос:
Мне нужно сохранить статус объекта, но я застрял с вопросом о том, какой тип sql лучше. Я использую postgresql и вижу следующие возможности:
- Varchar
- Перечисление
- Отдельная справочная таблица
Перечисление неплохое, даже если я добавлю новые статусы, и теперь оно кажется более простым и понятным, чем справочная таблица. Правильно ли это?
И еще один вопрос: какой вариант лучше для производительности в запросах выбора? Перечисление похоже на int, но ссылочная таблица обращается к запросу с помощью запроса join или where exists для фильтрации по статусу.
Помогите мне понять, что лучше?
Ответ №1:
Если статус может быть в нескольких таблицах, я бы рекомендовал справочную таблицу. Это гарантирует согласованность статусов.
В пределах одной таблицы вы можете использовать varchar()
столбец с ограничением проверки. Тем не менее, я бы, вероятно, все же склонялся к справочной таблице.
Справочная таблица имеет еще одно преимущество помимо согласованности. Это упрощает хранение информации о статусе — например, коротких имен, длинных описаний, значений «по умолчанию» для определенных атрибутов и так далее.
Комментарии:
1. Спасибо. Это означает, что если объект сложный, то он скорее имеет ссылочный статус. Но как насчет производительности?
2. @Dmytro . . . Соединения с небольшими справочными таблицами обычно оказывают трудно поддающееся измерению влияние на производительность. То есть влияние на производительность незначительно — ну, за одним исключением. Часто целочисленные ключи для обработки данных меньше, чем строки, используемые для представления данных. Это может быть большим выигрышем в производительности, потому что страницы данных в исходных таблицах меньше.