NULL
- это правильный способ представления неизвестного значения.Если ваш код не может справиться с этим, вы должны исправить свой код.Хранение «магических» значений в базе данных редко является хорошим решением.
Сказав, что: если вы выполняете запросы диапазона в этом столбце date
(например, такие как: where the_date_column > current_date - 42
или where the_date_column between date '2018-01-01' and date '2018-04-08'
), то имеете значения, отличные от NULL
, для представлениядата в будущем (или в прошлом) иногда имеет смысл (потому что вы избегаете предиката or is null
, который обычно запрещает использование индекса).
Если вы никогда не используете это значение для запросов диапазона (поэтому вы всегда сравниваете его с =
), тогда придерживайтесь NULL
и исправьте свой код.
Еслиу вас есть эти типы запросов, возможно, вы захотите взглянуть на значение infinity
Postgres, которое представляет значение даты, которое больше, чем любое другое значение (и -infinity
для значения, которое меньше, чем все остальные).
Таким образом, если ваше значение даты представляет, например, «действителен до» даты, а null
означает «действителен бесконечно», тогда использование -infinity
может иметь смысл:
insert into some_table
(some_value, valid_from, valid_until)
values
(42, '-infinity', 'infinity');
Следующий вопроссможет ли ваш код справиться с этим, хотя.
Если у вас регулярно есть шаблон начальной даты начала и , вы можете заменить его на одну daterange
столбец.Для диапазона типа type значение NULL
является эквивалентом «неограниченного».Даже если нижняя и верхняя граница диапазона равна NULL
, само значение диапазона не равно нулю