Лучшая практика для пар дат SCD (временные метки закрытия / открытия)

При реализации временных пар дата-время, какой подход лучше?

Подход 1

_RK   FROM_DTTM              TO_DTTM 
1     01-JAN-2012 00:00:00   31-DEC-2012 23:59:59 ------------> Old record closed out 
1     01-JAN-2013 00:00:00   31-DEC-4949 23:59:59 ------------> New active record

Используется с предложением фильтра следующим образом:

 where FROM_DTTM <= &FILTER_DATE <= TO_DTTM

Подход 2

_RK   FROM_DTTM              TO_DTTM 
1     01-JAN-2012 00:00:00   01-JAN-2013 00:00:00 ------------> Old record closed out 
1     01-JAN-2013 00:00:00   31-DEC-4949 23:59:59 ------------> New active record

Используется с предложением фильтра следующим образом:

 where FROM_DTTM <= &FILTER_DATE < TO_DTTM

Соображения:

Подход 1 совместим с синтаксисом предложения BETWEEN (включающий диапазон). По этой причине я считаю, что это лучший подход - и это мое беспокойство - всегда будет разрыв между временными отметками закрытия и открытия! Например, следующее (неправильно с точки зрения бизнеса) ничего не даст:

 where FROM_DTTM <= '31-DEC-2012 23:59:59.1'dt <= TO_DTTM

Различные базы данных будут иметь разные уровни точности здесь. Я предполагаю, что должен быть стандарт (всегда округлять до ближайшей секунды при фильтрации), но просто удивлялся, есть ли какие-либо другие причины для поддержки подхода 1 (например, предлагаемая двухвременная совместимость синтаксиса 'OF OF')? Или действительно, предпочтителен ли (и почему) подход 2..

1 ответ

Решение

Для континуумов (таких как дата-время или числовые показатели) я почти всегда рекомендую подход с полуоткрытым интервалом (подход 2). Как вы говорите, подход 1 имеет тенденцию создавать пропуски, или вам нужно знать точную точность для вычисления конечной точки. Вычисление конечных точек в подходе 2 всегда бывает проще.

"Преимущество" возможности использовать BETWEEN Насколько я понимаю, это очень незначительное по сравнению с возможностью быстро убедиться в правильности запроса.

Для не непрерывных данных (даты без времени или дискретные числа) я мог бы вернуться к использованию закрытого интервала.

Другие вопросы по тегам