Каков наилучший тип для статуса в таблице sql?

#sql #postgresql #types #enums #status

#sql #postgresql #типы #перечисления #Статус

Вопрос:

Мне нужно сохранить статус объекта, но я застрял с вопросом о том, какой тип sql лучше. Я использую postgresql и вижу следующие возможности:

  1. Varchar
  2. Перечисление
  3. Отдельная справочная таблица

Перечисление неплохое, даже если я добавлю новые статусы, и теперь оно кажется более простым и понятным, чем справочная таблица. Правильно ли это?

И еще один вопрос: какой вариант лучше для производительности в запросах выбора? Перечисление похоже на int, но ссылочная таблица обращается к запросу с помощью запроса join или where exists для фильтрации по статусу.

Помогите мне понять, что лучше?

Ответ №1:

Если статус может быть в нескольких таблицах, я бы рекомендовал справочную таблицу. Это гарантирует согласованность статусов.

В пределах одной таблицы вы можете использовать varchar() столбец с ограничением проверки. Тем не менее, я бы, вероятно, все же склонялся к справочной таблице.

Справочная таблица имеет еще одно преимущество помимо согласованности. Это упрощает хранение информации о статусе — например, коротких имен, длинных описаний, значений «по умолчанию» для определенных атрибутов и так далее.

Комментарии:

1. Спасибо. Это означает, что если объект сложный, то он скорее имеет ссылочный статус. Но как насчет производительности?

2. @Dmytro . . . Соединения с небольшими справочными таблицами обычно оказывают трудно поддающееся измерению влияние на производительность. То есть влияние на производительность незначительно — ну, за одним исключением. Часто целочисленные ключи для обработки данных меньше, чем строки, используемые для представления данных. Это может быть большим выигрышем в производительности, потому что страницы данных в исходных таблицах меньше.