Вопрос

Как бы вы представили временной отношение "многие ко многим" в SQL?При невременных обстоятельствах можно было бы использовать соединительный стол (он же ссылка / мост / карта) для соединения двух сторон.

Является ли добавление временного отслеживания таким же простым, как включение столбцов ValidStart и ValidEnd в таблицу соединений?Если вы сделали это, с какими проблемами (если таковые были) вы столкнулись?Есть ли лучший метод отслеживания изменений с течением времени в такого рода отношениях?

Если это вообще поможет, то в моем случае я специально использую SQL 2008, а временные данные - нет битемпоральный поскольку я отслеживаю только действительное время.

Это было полезно?

Решение

Я работаю над проектом (уже несколько лет), который использует как временные данные, так и временные отношения "многие ко многим".Каждая таблица содержит столбцы ValidFrom и ValidUntil (для хранения только дат).

Сначала вы должны определить семантику допустимых столбцов *, т.е.независимо от того, включен ValidUntil или исключен из диапазона действия.Вам также необходимо указать, являются ли НУЛЕВЫЕ даты допустимыми и каково их значение.

Далее вам понадобится пара функций, таких как dbo.Overlaps2() и dbo.Overlaps3(), который получает 2 и 3 диапазона дат соответственно и возвращает 1, если диапазоны дат перекрываются, и 0 в противном случае.

Кроме того, я определил представления для отношений "многие ко многим" с dbo.Overlap3 (...) = 1.

Еще одним моментом является наличие набора функций, которые вычисляют эффективный диапазон действия на основе дат в 2 или 3 связанных таблицах.

Недавно мне пришлось добавить функциональность, позволяющую пользователю отображать все доступные данные или только актуальные данные.Я сохраняю этот параметр в таблице users, связываю SPID с пользователем при открытии соединения и фильтрую записи в другом наборе представлений.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top