Перечень статей   Терминология   Choose language


Разработанный 'period'


'period' как время видимости

В первую очередь предлагаю сократить синтаксис: выбросить служебное слово 'valid', а дату писать без кавичек (в кавычках слишком длинный синтаксис).

valid period
period
'10 september 2007'
10.09.07  -- without quotes

Кроме того, предлагаю понимать 'period' исключительно как время, в течение которого запись видима.

insert into a (a1) values (3.14) period 01.01.07/05.00 till 01.01.07/10.00;

  update sys       set @datatime=01.01.07/03.00;
select * from a;
  -- result:   non records, because record is invisible before 05.00

  update sys       set @datatime=01.01.07/08.00;
select * from a;
  -- result: one record

  update sys       set @datatime=01.01.07/11.00;
select * from a;
  -- result:   non records, because record is invisible after 10.00
Следующие два выражения эквивалентны (если сделать 'update' вместо 'delete', то старая версия записи будет видима только в те же сроки - с 05.00 до 10.00).
  update sys       set @datatime=01.01.07/05.00;
insert into a (a1) values      (3.14);

  update sys       set @datatime=01.01.07/10.00;
delete from a;
  -- value "3.14"  is visible from 05.00 to 10.00
insert into a (a1) values (3.14) period 01.01.07/05.00 till 01.01.07/10.00;
  -- value "3.14"  is visible from 05.00 to 10.00

Можно изменить не только значения полей, но и время видимости записи: отдельно

update a              period 01.01.07/05.00 till 01.01.07/10.00;
update a              period select @t1, @t2 from ... ;
update a              period select   @ti    from ... ;  -- datatype "time interval"
или вместе с изменением полей
update a set @a1=1.00 period 01.01.07/05.00 till 01.01.07/10.00;
update a set @a1=1.00 period select @t1, @t2 from ... ;
update a set @a1=1.00 period select   @ti    from ... ;  -- datatype "time interval"

'period' как аналог 'where'

Невидимые записи можно извлечь принудительно, если указать интервал времени в запросе.

select * from a where ... period a inside 01.01.01 till  01.01.10;
select * from a where ... period a inside (select @t1, @t2 from ...);
select * from a where ... period a inside (select   @ti    from ...);
Возможно соединить таблицы по времени видимости.
select @a1, @b1
from   a,   b
where  ...
period a inside b;
Для периодов видимости возможны следующие операции:
period a < b
a.end < b.begin
period a <= b
a.end < b.end
period a = b
a.begin=b.begin and a.end=b.end
period a <> b
not a.begin=b.begin or not a.end=b.end
period a >= b
a.begin > b.begin
period a > b
a.begin > b.end
period a inside b
a.begin>b.begin and a.end<b.end
period a include b
a.begin<b.begin and a.end>b.end
Если интервал времени задается под-запросом, то в нем служебные слова 'union, intersect, except' должны быть заменены словами 'combine, cross, reject', чтобы повысить различимость собственно запроса и под-запроса.
select ...
period a inside select ...
                combine    -- instead of 'union'
                select ...
                cross      -- instead of 'intersect'
                select ...
                reject     -- instead of 'except'
                select ...
union
select ...
;

Тюрин Дмитрий



Перечень статей   Терминология   Choose language