Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Проектирование  [new]
mssql2008
Member

Откуда:
Сообщений: 13
Здравствуйте.
Довольно часто встречаюсь с необходимостью писать запросы вроде

SELECT
         *
FROM
        T
WHERE
          (T.DateTime1 = @DateTime AND T.DateTime2 IS NULL)
          OR (T.DateTime2 = @DateTime AND T.DateTime2 IS NOT NULL)
Т.е. T.DateTime2 имеет приоритет над T.DateTime1
Вопрос в следующем - не является ли это следствием неверной проектировки?
Не лучше ли делать 3 поля с датой, где 3-е поле T.DateTime и в него в соответствии с приоритетами записывается нужное значение(не важно как). Запрос приобрел бы след-й вид
SELECT
         *
FROM
        T
WHERE
          T.DateTime = @DateTime          
Вопрос возник при необходимости оптимизации.
14 авг 11, 21:33    [11117084]     Ответить | Цитировать Сообщить модератору
 Re: Проектирование  [new]
iljy
Member

Откуда:
Сообщений: 8711
mssql2008,

сделайте DateTime3 вычисляемым полем, ISNULL(DateTime2,DateTime1), и постройте по нему индекс. Насчет необходимости 2х дат - это уж сами думайте, зависит от задачи. По проектированию есть отдельный форум.
14 авг 11, 22:35    [11117231]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить