Ci-dessous, les différences entre deux révisions de la page.
site:enseignement:licence:2i009:tme8 [14/02/2019 12:09] amine créée |
site:enseignement:licence:2i009:tme8 [25/03/2019 12:27] (Version actuelle) amine |
||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
====== TME 8: création de schémas – contraintes d'intégrité ====== | ====== TME 8: création de schémas – contraintes d'intégrité ====== | ||
+ | Ce TME se base sur le TD8 et vise à illustrer la modification des tables et l'interaction avec les contraintes d'intégrité. On utilise un schéma Entreprise similaire à celui vu en TD et rappelé ici. | ||
+ | |||
+ | * **EMPLOYE**(__NumSS__, NomE, PrenomE, VilleE, DateNaiss) | ||
+ | * **PROJET** (__NumProj__, NomProj, RespProj*, VilleP, Budget) | ||
+ | * **EMBAUCHE** (__NumSS*, NumProj*__, DateEmb, Profil*) | ||
+ | * **GRILLE_SAL** (__Profil__, salaire) | ||
+ | |||
+ | ===== Exercice 1 ===== | ||
+ | Créez le schéma du Entreprise sous Oracle et associez aux tables les contraintes d'intégrité correspondantes. | ||
+ | |||
+ | Dans ce qui suit, il vous est demandé d'effectuer des insertions de n-uplets dans des tables. | ||
+ | ==== Syntaxe pour l'insertion ==== | ||
+ | <code sql>insert into Table values ('val1', 'val2', ....) ;</code> | ||
+ | |||
+ | Par exemple, pour insérer une employée 'LARS Anna', qui habite 'Paris' et qui est née le 25- | ||
+ | 08-1975, il suffit d'exécuter l'instruction ci-dessous | ||
+ | <code sql>insert into employe values('21456','LARS', 'Anna','paris', to_date('25-08- 1975'), sysdate);</code> | ||
+ | |||
+ | et de constater que la système retourne bien le message | ||
+ | <code bash>1 ligne(s) insérée(s)</code> | ||
+ | |||
+ | ==== Syntaxe pour la suppression ==== | ||
+ | <code sql>delete from Table ;</code> | ||
+ | |||
+ | ===== Exercice 2 ===== | ||
+ | Insérez dans chaque table au moins un n-uplet qui vérifie les contraintes d'intégrité. Vous avez la liberté de choisir les valeurs que vous voulez. | ||
+ | |||
+ | ===== Exercice 3 ===== | ||
+ | Proposez des insertions qui violent les contraintes d'intégrité définies pour chaque table. | ||
+ | Par exemple, l'instruction ci-dessous: | ||
+ | <code sql>insert into employe values(null,'LARS', 'Anna','paris', to_date('25-08- 1975'), sysdate);</code> | ||
+ | |||
+ | viole la contrainte de clé primaire de Employe car elle tente d'insérer un employé sans valeur pour l'attribut clé primaire | ||
+ | Si vous tentez d'exécuter cette instruction, vous constaterez l'erreur | ||
+ | <code bash>ERREUR à la ligne 1 : | ||
+ | ORA-01400: impossible d'insérer NULL dans "EMPLOYE"."NUMSS" </code> | ||
+ | |||
+ | On peut utiliser une syntaxe alternative pour les insertions en spécifiant les attributs dont on renseigne les valeurs comme indiqué ci-dessous | ||
+ | <code sql>insert into employe (NumSS, NomE, PrenomE, villE, dateNaiss) values ('LARS', 'Anna','paris', to_date('25-08-1975')) ;</code> | ||
+ | |||
+ | Répondre aux questions suivantes : | ||
+ | - Proposer une insertion dans la table Employé qui ne respecte pas la contrainte de clé primaire. | ||
+ | - Proposer une insertion dans la table Employé qui ne respecte pas la contrainte de limite d'âge. | ||
+ | - Proposer une insertion dans la table Employé qui ne respecte pas la contrainte de longueur de l'attribut NumSS. | ||
+ | - Proposer une insertion dans la table Employé qui ne respecte pas la contrainte sur les villes possibles. | ||
+ | - Insérer dans la table Employé deux employés avec le même nom et le même prénom. | ||
+ | - Proposer une insertion dans la table Grille_SAL qui ne respecte pas la contrainte C8. | ||
+ | - Proposer une insertion dans la table Projet qui ne respecte pas la contrainte référentielle vers Employe : insérer un responsable de projet qui n'est pas dans la table Employé | ||
+ | - Proposer une insertion dans la table Embauche qui ne respecte pas une des contraintes référentielles : par exemple, associer un employé existant à un projet qui n'existe pas. |