UML 2 pour les bases de données
208
© Éditions Eyrolles
-- État de la base
SQL> SELECT * FROM Personnel;
NUMPERS NOMPERS
INDICE
PRIME BREVET
VALIDITE
--------- --------------- --------- --------- ---------- -------1 Tanguy
4MPY68
10/12/02
2 Natacha
567
15000,2
3 Laverdure
3MPY69
11/12/03
-- Ajout d’un personnel PNT et PNC
SQL> INSERT INTO Personnel VALUES (4,'Soutou', 780, 100.00,
'3MPY93', '11-12-2003');
ERREUR à la ligne 1 : ORA-02290: violation de contraintes (SOUTOU.CK_PREDICAT_A) de vérification
-- Ajout d’un personnel ni PNT ni PNC
SQL> INSERT INTO Personnel VALUES (5,'Bidal',NULL,NULL,NULL,NULL);
ERREUR à la ligne 1 : ORA-02290: violation de contraintes (SOUTOU.CK_PREDICAT_B) de vérification
Contrainte de totalité
Les prédicats B et C sont à programmer. Nous avons parlé plus haut de la contrainte B. La
contrainte C revient à supprimer la contrainte A précédente avec l’option DROP CONSTRAINT.
--- Désactivation du prédicat A
ALTER TABLE Personnel DROP CONSTRAINT ck_predicat_A;
On peut désormais insérer un personnel à la fois PNT et PNC comme le montre le script suivant :
SQL> INSERT INTO Personnel VALUES (4,'Soutou', 780, 100.00,
'3MPY93', '11-12-2003');
SQL> SELECT * FROM Personnel;
NUMPERS NOMPERS
INDICE
PRIME BREVET
VALIDITE
--------- --------------- --------- --------- ---------- -------1 Tanguy
4MPY68
10/12/02
2 Natacha
567
15000,2
3 Laverdure
3MPY69
11/12/03
4 Soutou
780
100 3MPY93
11/12/03
Contrainte d’exclusivité
Il faut redéfinir le prédicat A en supprimant au préalable les enregistrements ne répondant pas à
ce critère, et programmer le prédicat D en supprimant la contrainte vérifiant le prédicat B.
--- Activation du 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));
--- Activation du predicat D
ALTER TABLE Personnel DROP CONSTRAINT ck_predicat_B;
Précédent

- 214/316

Suivant