А нельзя поподробнее, как вы храните период. реквизиты? а то вот тоже
надо сделать, а с чего начать- не знаю.
Я в результате остановился на хранении "версий" записи с диапазоном дат,
указывающим когда запись актуальна. То есть примерно так:
create table kl
IdKl integer not null
DtStart date
DtEnd date
...
прочие реквизиты.
Таким образом все реквизиты становятся переодическими. DtStart и DtEnd
отслеживаются в триггерах.
соответственно выборка данных справочника на заданную дату :
select * From Kl where :dt beetwin DtStart and Coalesce(DtEnd, '01.01.2100')
В join - ах вот так получается:
Select ... From Docs D
Inner Join Kl K on D.Idkl = K.IdKl and D.Dat beetwin K.DtStart and
Coalesce(K.DtEnd, '01.01.2100')
У Деда, насколько помню, по другому сделано. У него есть поле
IdVersion integer
указывающее номер "версии" записи, а в документах ссылка на справочник по
IdKl, IdVersion. То бишь селекты у него шустрее должны работать. Но при этом
надо как-то обрабатывать ситуации, когда меняется дата документа и новое
значение даты соответствует другой версии записи в справочнике клиентов. Ну
и соответственно наоборот, когда меняется диапазон "актуальности" записи в
справочнике - нужно прошерстить документы... И вроде как он одной датой
обходится - датой начала. Хотя я мог и напутать чего-нибудь. Ежели что -
Alex поправит... :)
With b/r. Gleb.