TME 9: Modification des données – contraintes d'intégrité sous H2

Ce TME réutilise le schéma Entreprise du TD 9 et vise à illustrer la modification des tables et l'interaction avec les contraintes d'intégrité. Ce schéma est décrit ci-dessous :

Pour faciliter la saisie des données, une légère modification est apporté : désormais, l'attribut NumSS de Employe a une longueur fixe de 5 chiffres et l'attribut NumProj de Projet contient 3 chiffres. Pour créer le schéma de cette base, exécuter le script accessible depuis tme8-creations-h2.

Les tables que vous venez de créer sont vides. Vous pouvez le vérifier en exécutant une requête du style

 SELECT COUNT(*) FROM nom_table ;

Dans un premier temps (Première Partie), vous allez tenter d'insérer des n-uplets, supprimer des n-uplets et modifier des n-uplets avec le schéma que vous venez de créer.Vous remarquerez que plusieurs de ces opérations seront rejetées à cause des contraintes d'intégrité. Prenez soin d'observer les messages d'erreurs renvoyés par Oracle.

Dans un second temps (Seconde Partie), vous allez recharger le même schéma avec des contraintes plus souples et constater que plusieurs opérations interdites avec la configuration initiale seront acceptées avec cette nouvelle configuration.

1. Première Partie

Insertions rejetées

Pour la suite des questions, il vous est demandé d'insérer de vider Employe et d'insérer trois nouveaux n-uplets en exécutant les commandes suivantes :

DELETE FROM Employe;
 
INSERT INTO Employe (NumSS, NomE, PrenomE, VilleE, DateNaiss)
SELECT * FROM (
       SELECT	22334, 'Adam', 'Funk', 'Paris',  PARSEDATETIME('1-12-1982',  'dd-mm-yyyy')		UNION ALL
       SELECT	45566, 'Rachid', 'Allaoui', 'Lyon', PARSEDATETIME('13-4-1986',  'dd-mm-yyyy')	     	UNION ALL
       SELECT	77889, 'Florent', 'Girac' , 'Marseille', PARSEDATETIME('4-11-1990', 'dd-mm-yyyy')
);
SELECT * FROM Employe;

A présent, il est vous demandé d'insérer dans Projet trois nuplets en exécutant les commandes suivantes :

 
INSERT INTO Projet VALUES (123, 'ADOOP', 22334, 'Paris', 120000);
INSERT INTO Projet VALUES (757, 'SKALA', 45566, 'Lyon', 180000);
INSERT INTO Projet VALUES (890, 'BAJA', 22334, 'Paris', 24000);

Insérer les nuplets suivants dans la table Grille_sal trois nuplets comme suit :

INSERT INTO grille_sal VALUES ('Admin', 80000);
INSERT INTO grille_sal VALUES ('Deve',45000);
INSERT INTO grille_sal VALUES ('Tech',35000);

Suppressions rejetées

Afin de répondre aux questions qui suivent, exécuter les commandes se trouvant dans Creation puis celles dans Insertions

Mises à jour rejetées

Remettre la base à l'état initial en exécutant les commandes se trouvant dans Creation puis celles dans Insertions

2. Deuxième Partie

Comme indiqué précédemment, le but de cette partie d'illustrer un cas où les mises-a-jour ne sont pas rejetées mais plutôt propagées. Pour ce faire exécuter les commandes se trouvant dans Creation-contraintes-cascade puis insérer les nuplets en exécutant les commandes de Insertions.

Désormais, il sera possible de supprimer des nuplets d'une table référencées par une autre table. Pour le voir, supprimer les n-uplets de Employe et vérifier que tous les n-uplets des autres tables qui référencent des employés venant d'être supprimés sont aussi supprimés.