@serikd

Не считается ли признаком плохой архитектуры SQL запрос?

Здравствуйте.
Валиден ли следующий SQL и не является ли признаком плохой архитектуры приложения?
Задача - вывести посты у которых либо не выставленная конечная дата (бессрочные) , либо дата еще не наступила (временные)
.. AND ('end_time' >= NOW() OR 'end_time' IS NULL) ..


Может при добавлении заполнять end_time + 100 (200) лет?
  • Вопрос задан
  • 184 просмотра
Пригласить эксперта
Ответы на вопрос 3
@AlexListen
админ, стаж 14 лет
IS NULL не очень хорошо. Насколько помню, имеются проблемы с индексами если в строках есть NULL, лучше такие столбы объявлять с дефолтовыми предельными значениями, типа 9999-12-31 23:59:59, а чтобы совсем хорошо, то так ... AND `end_time` BEETWEN (NOW(), '9999-12-31 23:59:59')
Ответ написан
sim3x
@sim3x
...AND ( 'is_public' == 1 OR 'end_time' >= NOW() )
Ответ написан
Комментировать
@bizon2000
Java-программист
Вообще-то, с точки зрения архитектуры, правильно для отсутствующих значений использовать именно NULL - это значение для того и существует.
Насчет индексов - это зависит, во-первых, от того, какую RDBMS вы используете, а во-вторых, от того, содержит ли индекс другие колонки.
Так, например, в Oracle ключи состоящие из одних NULL в индекс не попадают, т.е., если, например, индекс строится по 2 колонкам: id и start_date, то в индекс этот ключ не попадет, только если обе эти колонки содержат NULL.
В то же время, в MS SQL Server значения NULL индексируются так же, как и остальные значения.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы