/***************************************************/
/* Test program for temporal referential integrity */
/* T. Myrach, IWI Bern, 31-OCT-95                  */
/***************************************************/

/* Part A: Valid time relations */
/* ---------------------------- */

/* Definition of primary key relation department */

create table pk_dep (
d_name char(10) primary key)
as valid;

/* Definition of foreign key relation employee */

create table fk_emp (
e_name char(10) primary key, 
ed_name char(10) valid references pk_dep(d_name))
as valid;

/* Population of PK relation */

nonsequenced valid period '1989-1996'
insert into pk_dep values ('AD');

nonsequenced valid period '1984-forever'
insert into pk_dep values ('DM');

commit;

/* Insertion in FK relation  
   should be rejected because of RI violation */

nonsequenced valid period '1995-1997'
insert into fk_emp values ('Hinz','AD');

commit;

/* Insertion in FK relation  
   should be rejected too because of RI violation */

nonsequenced valid period '1995-forever'
insert into fk_emp values ('Kunz','AD');

commit;

/* Insertion in FK relation does not violate RI */

nonsequenced valid period '1995-1997'
insert into fk_emp values ('Mueller','DM');

commit;

/* Insertion in FK relation does not violate RI */

nonsequenced valid period '1995-forever'
insert into fk_emp values ('Meier','DM');

commit;

/* Deletion on PK relation leads to overlapping of tuples
   in FK relation and, therefore, should be rejected */

nonsequenced valid period '1996-forever'
delete from pk_dep where d_name='DM';

commit;

valid select * from pk_dep;

/*
       VALID d_name
 ----------- ------
 [1989-1996)     AD
 [1984-1996)     DM
*/


valid select * from fk_emp;

/*
          VALID  e_name ed_name
 -------------- ------- -------
    [1995-1997)    Hinz      AD
 [1995-forever)    Kunz      AD
    [1995-1997) Mueller      DM
 [1995-forever)   Meier      DM
*/


/* Part B: Bitemporal relations */
/* ---------------------------- */

nonsequenced valid period 'beginning-forever'
delete from pk_dep;

nonsequenced valid period 'beginning-forever'
delete from fk_emp;

commit;

alter table pk_dep add transaction;
alter table fk_emp add transaction;

set clock to timestamp '1995/09';

/* Population of PK relation */

nonsequenced valid period '1989-1996'
insert into pk_dep values ('AD');

nonsequenced valid period '1984-forever'
insert into pk_dep values ('DM');

commit;

set clock to timestamp '1995/10';

/* Insertion in FK relation should be rejected 
   because of RI violation */

nonsequenced valid period '1995-1997'
insert into fk_emp values ('Hinz','AD');

commit;

/* Insertion in FK relation should be rejected too
   because of RI violation */

nonsequenced valid period '1995-forever'
insert into fk_emp values ('Kunz','AD');

commit;

/* Insertion in FK relation does not violate RI */

nonsequenced valid period '1995-1997'
insert into fk_emp values ('Mueller','DM');

commit;

/* Insertion in FK relation does not violate RI */

nonsequenced valid period '1995-forever'
insert into fk_emp values ('Meier','DM');

commit;

set clock to timestamp '1995/11';

/* Deletion on PK relation should be rejected because
   it would lead to RI violation of tuples in FK relation  */

nonsequenced valid period '1996-forever'
delete from pk_dep where d_name='DM';

commit;

valid and transaction select * from pk_dep;

/*
       TRANSACTION          VALID d_name
 ----------------- -------------- ------
 [1995/09-forever)    [1989-1996)     AD
 [1995/11-forever)    [1984-1996)     DM
 [1995/09-1995/11) [1984-forever)     DM
*/


valid and transaction select * from fk_emp;

/*
       TRANSACTION          VALID  e_name ed_name
 ----------------- -------------- ------- -------
 [1995/10-forever)    [1995-1997)    Hinz      AD
 [1995/10-forever) [1995-forever)    Kunz      AD
 [1995/10-forever)    [1995-1997) Mueller      DM
 [1995/10-forever) [1995-forever)   Meier      DM
*/

/* End of modification */

remove clock;

drop table fk_emp;
drop table pk_dep;

commit;
