Bases de Données / Databases

Site Web de l'équipe BD du LIP6 / LIP6 DB Web Site

Outils pour utilisateurs

Outils du site


site:enseignement:licence:2i009:tme8_h2

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Prochaine révision
Révision précédente
site:enseignement:licence:2i009:tme8_h2 [15/04/2020 16:29]
amann créée
site:enseignement:licence:2i009:tme8_h2 [16/04/2021 09:52] (Version actuelle)
amine [Exercice 3]
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é ​(H2) ======
  
-version pour H2+<fc #ff0000>version pour H2</​fc>​ 
 + 
 +===== Exercice 1 ===== 
 + 
 +Créez le schéma Entreprise du TD sous H2 et associez aux tables les contraintes d'​intégrité correspondantes.
  
-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)    * **EMPLOYE**(__NumSS__,​ NomE, PrenomE, VilleE, DateNaiss)
Ligne 10: Ligne 13:
   * **GRILLE_SAL** (__Profil__,​ salaire) ​   * **GRILLE_SAL** (__Profil__,​ salaire) ​
  
-===== Exercice ​===== +===== Exercice ​===== 
-Créez ​le schéma ​du Entreprise sous Oracle et associez aux tables ​les contraintes d'​intégrité correspondantes.+Tester les contraintes existantes sur le schéma ​précédent en exécutant ​les commandes spécifiées dans ce fichier: {{ :​site:​enseignement:​licence:​2i009:​etu-tme8_ddl_ci_h2.pdf |TME8}} 
 +===== Exercice 3 (facultatif) =====
  
-Dans ce qui suit, il vous est demandé ​d'​effectuer des insertions ​de n-uplets dans des tables. +On considère le schéma relationnel suivant ​d’une application d’écoute de musique sur Internet ​de type Deezer :
-==== Syntaxe pour l'​insertion ==== +
-<code sql>​insert into Table values ('​val1',​ '​val2',​ ....) ;</​code>​+
  
-Par exemplepour insérer une employée 'LARS Anna'qui habite '​Paris'​ et qui est née le 25- +   * ALBUM(albumIdalbumTitreparutiongenre, label) 
-08-1975il suffit d'​exécuter l'​instruction ci-dessous +   * PISTE(pisteIdalbumIdpisteTitreinterIdcompId, durée) 
-<code sql>​insert into employe values('​21456'​,'​LARS'​'​Anna'​,'​paris'​to_date('​25-08- 1975'), sysdate);</​code>​+   * ARTISTE(artistId, nom, typeArtiste) 
 +   * COMPTE(email,​ tempsEcoute) 
 +   * ABONNÉ(email) 
 +   * PLAYLIST(email,​ pisteId, albumId, durée) 
 +   * AVIS(email, pisteId, albumIdscore)
  
-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 ==== +Chaque album (table ALBUM) est identifié par un identifiant (albumId) et on stocke le titre (albumTitre),​ l’année de parution, le genre et le label. ​ Il y a exactement trois genres ('​jazz',​ '​classique',​ '​rock'​) et deux labels ('​Sony',​ '​Universal'​) possibles. 
-<code sql>​delete from Table ;</​code>​+ 
 +Les artistes sont stockés dans la table ARTISTE qui contient l’identifiant (artistId) et le nom de l’artiste (32 charactères max). On distingue entre trois types d'​artistes ('​compositeurs',​ '​interprêtes',​ '​interprêtes-compositeurs'​). 
 + 
 +Les pistes de chaque album (table PISTE) sont identifiées par le numéro de piste (pisteId) et l’identifiant de l’al bum. On stocke le titre de la piste (obligatoire),​ l’identifiant de l’interprète (interId), l’identifiant du compositeur (compId) et la durée en secondes (spérieur à 0).  
 + 
 + 
 +Tous les comptes utilisateurs (table COMPTE) sont identifiés 
 +par leur email (32 charactères max) et on stocke leur temps d'​écoute global (0 par défaut). Les comptes avec un abonnement sont identifiés dans la table ABONNE. 
 +Tous les utilisateurs peuvent écouter des chansons et donner un avis (score optionnel entre -5 et 5). Uniquement les abonnées peuvent maintenir une playlist (table PLAYLIST). 
 + 
 +Question 1 : Définissez le schéma H2 avec contrainte de clé (PRIMARY KEY et UNIQUE), contrainte référentielle (FOREIGN KEY), contrainte de domaine (valeurs possibles des attributs, NOT NULL) et contrainte de tuple (condition liant les valeurs des différents attributs ​pour tous les n-uplets 
 +de la table). 
 + 
 +Question 2: Est-ce qu'il est possible qu'un compositeur d'une piste (table PISTE) soit un interprête dans la table ARTISTE ? Si oui, comment faudrait-il modifier le schéma pour éviter cette incohérence. 
  
-===== 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. 
site/enseignement/licence/2i009/tme8_h2.1586960940.txt.gz · Dernière modification: 15/04/2020 16:29 par amann