© Éditions Eyrolles
207
chapitre n° 3
Le niveau physique : de SQL2 à SQL3
Contrainte de totalité
La contrainte de partition doit rendre valide le prédicat B et il peut exister un personnel à la
fois PNT et PNC (prédicat C). Nous avons parlé plus haut du prédicat B. Le prédicat C revient
à ne pas programmer le prédicat A précédent (ne pas mettre en œuvre les déclencheurs des
tables PNT et PNC).
Contrainte d’exclusivité
Dans ce cas et dans le suivant, la table Personnel doit exister pour contenir les employés n’étant
ni PNT ni PNC (prédicat D). Pour l’exclusivité, le prédicat A se programme comme pour la
décomposition ascendante. Le prédicat D revient à ne pas programmer le prédicat B précédente (ne pas mettre en œuvre les procédures d’ajout et de suppression et le déclencheur de la
table Personnel).
Sans contrainte
Aucun prédicat n’est à programmer et la table Personnel doit être présente dans la base.
Décomposition ascendante (push-up)
Dans cette décomposition, on ne retrouve qu’une seule relation au niveau logique, qui devient
une table (Personnel) au niveau physique. Cette table contient toutes les colonnes issues des
sous-entités (sous-classes).
Contrainte de partition
Les prédicats A et B se programment au niveau de la table Personnel à l’aide de contraintes
de validation CHECK :
●
Pour le prédicat A, il faut que les colonnes indice, prime, brevet et validite ne
soient pas toutes initialisées.
●
Pour le prédicat B, il faut que les colonnes indice, prime, brevet et validite ne
soient pas toutes nulles.
L’ordre ALTER TABLE modifie la structure d’une table (colonne ou contrainte SQL), ici on
ajoute deux contraintes.
--- prédicat A
ALTER TABLE Personnel ADD CONSTRAINT ck_predicat_A
CHECK ((indice IS NULL AND prime IS NULL)
OR (brevet IS NULL AND validiteLicence IS NULL));
--- prédicat B
ALTER TABLE Personnel ADD CONSTRAINT ck_predicat_B
CHECK ((indice IS NOT NULL OR prime IS NOT NULL)
OR (brevet IS NOT NULL OR validiteLicence IS NOT NULL));
Les tentatives d’ajout d’un personnel à la fois PNT et PNC et d’un personnel n’étant ni l’un ni
l’autre se traduiront par un échec.
Précédent

- 213/316

Suivant