180
Chapitre 7 • Applications avancées en SQL
7.3.5 Gestion des données historiques
On conçoit aisément que la gestion d’une table telle que H_CLIENT demande le plus
grand soin. L’insertion, la modification et la suppression de lignes doivent s’effectuer de manière que les propriétés illustrées ci-dessus soient respectées rigoureusement. Idéalement, l’utilisateur devrait se contenter d’effectuer des opérations
correspondant directement aux événements du domaine d’application, sans se
préoccuper des manipulations des informations historiques, qui devraient être effectuées automatiquement. C’est ce que nous allons proposer, pour le modèle de temps
le plus simple, le temps physique (voir Remarques ci-après) par la technique des
déclencheurs. Nous définissons d’abord la table des historiques :
create table H_CLIENT(
NCLI
char(8)
not null,
debut
timestamp not null,
fin
timestamp default '1-01-3000' not null,
NOM
char(18) not null,
LOCALITE char(20) not null,
CAT
char(2),
primary key (NCLI,debut));
... puis une vue qui présente les états courants :
create view CLIENT(NCLI,NOM,LOCALITE,CAT)as
select NCLI,NOM,LOCALITE,CAT
from
H_CLIENT
where fin = '1-01-3000';
C’est sur cette vue, qui masque les colonnes temporelles debut et fin, que les opérations insert, update et delete vont être effectuées. Les déclencheurs vont
compléter ces opérations pour garantir une gestion correcte des données historiques.
Lors d’une insertion dans CLIENT, on garnit la colonne debut avant l’enregistrement dans la table H_CLIENT. La colonne fin est mise à la valeur par défaut (futur
infini) et peut être ignorée. Attention cependant à ne pas déclencher cette opération
NCLI
debut
fin
NOM
LOCALITE CAT
DELEGUE
C400
C400
C400
C400
C400
C400
F011
F011
F011
F011
F011
F011
03-11-1998
10-08-1999
18-05-2000
26-12-2000
22-03-2001
07-04-2001
08-10-1997
10-08-1999
12-03-2000
24-07-2000
15-03-2001
22-03-2001
10-08-1999
18-05-2000
26-12-2000
22-03-2001
07-04-2001
01-01-3000
10-08-1999
12-03-2000
24-07-2000
15-03-2001
22-03-2001
22-07-2001
FERARD
FERARD
FERARD
FERARD
FERARD
FERARD
PONCELET
PONCELET
PONCELET
PONCELET
PONCELET
PONCELET
Poitiers
Poitiers
Poitiers
Paris
Paris
Paris
Lille
Lille
Paris
Paris
Toulouse
Toulouse
B1
B1
B2
B2
B2
C1
B1
B1
B2
B2
B1
B1
Lagarde
Langlois
Langlois
Vermont
Langlois
Langlois
Langlois
Vermont
Lagarde
Vermont
Lagarde
Vermont
Chapitre 7 • Applications avancées en SQL
7.3.5 Gestion des données historiques
On conçoit aisément que la gestion d’une table telle que H_CLIENT demande le plus
grand soin. L’insertion, la modification et la suppression de lignes doivent s’effectuer de manière que les propriétés illustrées ci-dessus soient respectées rigoureusement. Idéalement, l’utilisateur devrait se contenter d’effectuer des opérations
correspondant directement aux événements du domaine d’application, sans se
préoccuper des manipulations des informations historiques, qui devraient être effectuées automatiquement. C’est ce que nous allons proposer, pour le modèle de temps
le plus simple, le temps physique (voir Remarques ci-après) par la technique des
déclencheurs. Nous définissons d’abord la table des historiques :
create table H_CLIENT(
NCLI
char(8)
not null,
debut
timestamp not null,
fin
timestamp default '1-01-3000' not null,
NOM
char(18) not null,
LOCALITE char(20) not null,
CAT
char(2),
primary key (NCLI,debut));
... puis une vue qui présente les états courants :
create view CLIENT(NCLI,NOM,LOCALITE,CAT)as
select NCLI,NOM,LOCALITE,CAT
from
H_CLIENT
where fin = '1-01-3000';
C’est sur cette vue, qui masque les colonnes temporelles debut et fin, que les opérations insert, update et delete vont être effectuées. Les déclencheurs vont
compléter ces opérations pour garantir une gestion correcte des données historiques.
Lors d’une insertion dans CLIENT, on garnit la colonne debut avant l’enregistrement dans la table H_CLIENT. La colonne fin est mise à la valeur par défaut (futur
infini) et peut être ignorée. Attention cependant à ne pas déclencher cette opération
NCLI
debut
fin
NOM
LOCALITE CAT
DELEGUE
C400
C400
C400
C400
C400
C400
F011
F011
F011
F011
F011
F011
03-11-1998
10-08-1999
18-05-2000
26-12-2000
22-03-2001
07-04-2001
08-10-1997
10-08-1999
12-03-2000
24-07-2000
15-03-2001
22-03-2001
10-08-1999
18-05-2000
26-12-2000
22-03-2001
07-04-2001
01-01-3000
10-08-1999
12-03-2000
24-07-2000
15-03-2001
22-03-2001
22-07-2001
FERARD
FERARD
FERARD
FERARD
FERARD
FERARD
PONCELET
PONCELET
PONCELET
PONCELET
PONCELET
PONCELET
Poitiers
Poitiers
Poitiers
Paris
Paris
Paris
Lille
Lille
Paris
Paris
Toulouse
Toulouse
B1
B1
B2
B2
B2
C1
B1
B1
B2
B2
B1
B1
Lagarde
Langlois
Langlois
Vermont
Langlois
Langlois
Langlois
Vermont
Lagarde
Vermont
Lagarde
Vermont
