Я работаю над проектом (уже несколько лет), который использует как временные данные, так и временные отношения «многие ко многим». В каждой таблице есть столбцы ValidFrom и ValidUntil (сохраняются только даты).
Сначала вы должны определить семантику столбцов Valid *, т. Е. Включен ли ValidUntil или исключен из диапазона допустимых значений. Вам также необходимо указать, действительны ли значения NULL и каково их значение.
Далее вам понадобится пара функций, таких как dbo.Overlaps2 () и dbo.Overlaps3 (), которые получают 2 и 3 диапазона дат соответственно и возвращают 1, если диапазоны дат перекрываются, и 0 в противном случае.
Кроме того, я определил представления для отношений «многие ко многим» с помощью dbo.Overlap3 (...) = 1.
Еще одним моментом является наличие набора функций, которые рассчитывают эффективный диапазон действия на основе дат в 2 или 3 связанных таблицах.
Недавно мне пришлось добавить функциональность, чтобы позволить пользователю отображать все доступные данные или только действительные на данный момент данные. Я сохраняю этот параметр в таблице пользователей, связываю SPID с пользователем при открытии соединения и фильтрую записи в другом наборе представлений.