Différences

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

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
Prochaine révision
Révision précédente
sio2:d4-a07-exercice_applicatif_sur_les_declencheurs [2024/11/28 11:33] dthevenotsio2:d4-a07-exercice_applicatif_sur_les_declencheurs [2025/03/18 08:29] (Version actuelle) – [D4-A07 : Exercice applicatif sur les déclencheurs : (2) Gestion automatisée des données d'un parc immobilier] dthevenot
Ligne 1: Ligne 1:
-====== Exercice applicatif sur les déclencheurs : Gestion automatisée des données d'un parc immobilier ======+====== D4-A07 : Exercice applicatif sur les déclencheurs : (1) Gestion automatisée des données d'un parc immobilier ====== 
 +<badge>Compte-rendu de TP : Contrainte gérée / déclencheur / tests unitaires réalisés </badge>
  
 Soit le modèle relationnel des données suivant : Soit le modèle relationnel des données suivant :
Ligne 5: Ligne 6:
 immeuble(id, adrNum, adrVoie, adrCodePostal, adrVille, fibreOptique, parkingPrivatif) immeuble(id, adrNum, adrVoie, adrCodePostal, adrVille, fibreOptique, parkingPrivatif)
 Clef primaire : id (autoincrémenté)  Clef primaire : id (autoincrémenté) 
-Remarque : tous les attributs sont non null, parkingPrivatif est de type booléen +Remarque : tous les attributs sont non null, fibreOptique et parkingPrivatif sont de type booléen 
  
 appartement(idImmeuble, numAppart, description, loyer, superficie, terrasse, classeConso, chauffage, placeParking, prixParking) appartement(idImmeuble, numAppart, description, loyer, superficie, terrasse, classeConso, chauffage, placeParking, prixParking)
Ligne 14: Ligne 15:
 piece(idImmeuble, idAppartement, numPiece, superficie, fonction) piece(idImmeuble, idAppartement, numPiece, superficie, fonction)
 Clef primaire : idImmeuble, idAppartement, numPiece Clef primaire : idImmeuble, idAppartement, numPiece
-Clefs étrangères : (idImmeuble, idAppartement) en référence à appartement(idImmeuble, numAppart)+Clef étrangère : (idImmeuble, idAppartement) en référence à appartement(idImmeuble, numAppart)
 Remarque : attributs NULL par défaut Remarque : attributs NULL par défaut
 </code> </code>
Ligne 20: Ligne 21:
   - créer le script de la base de données nommé votreNomBDParcImmo.sql   - créer le script de la base de données nommé votreNomBDParcImmo.sql
   - implanter ce script dans votre SGBD   - implanter ce script dans votre SGBD
-  - vous avez ci-dessous le code d'un déclencheur permettant de vérifier la contrainte suivante : le prix de la place de parking d’un appartement peut et doit être NULL si l’appartement ne possède pas de place de parking. Programmer le déclencheur avec votre environnement de gestion de bases de données MySQL.+  - vous avez ci-dessous le code d'un déclencheur : quel est sont rôle ? quelle contrainte est appliquée ? 
 +  - programmer le déclencheur avec votre environnement de gestion de bases de données MySQL : expliquer chaque ligne.
     - <code>     - <code>
 DROP TRIGGER IF EXISTS prixAppartBeforeInsert; DROP TRIGGER IF EXISTS prixAppartBeforeInsert;
Ligne 32: Ligne 34:
 DELIMITER ; DELIMITER ;
 </code> </code>
-  - Créer le même trigger pour l’événement « BEFORE UPDATE » +  - Alternative empêchant l’insertion (aucune action, transaction interrompue) si il y a un prix et pas de place de parking, tester le déclencheur avec cette alternative :
-  - Alternative empêchant l’insertion (aucune action, transaction interrompue) si il y a un prix et pas de place de parking, compléter vos déclencheurs avec cette alternative :+
     - <code>     - <code>
     IF NEW.placeParking = 0  AND NEW.prixParking IS NOT NULL THEN     IF NEW.placeParking = 0  AND NEW.prixParking IS NOT NULL THEN
Ligne 46: Ligne 47:
     - Modifier l'appartement 1.2 afin qu'il n'ai plus de parking : que se passe t'il ? Quelle solution proposez vous pour éviter de lever une erreur ? Appliquer cette solution et tester-la.     - Modifier l'appartement 1.2 afin qu'il n'ai plus de parking : que se passe t'il ? Quelle solution proposez vous pour éviter de lever une erreur ? Appliquer cette solution et tester-la.
 <code> <code>
--- Insertion d'un immeuble+-- Insertion d'un immeuble avec parking privatif
 INSERT INTO immeuble INSERT INTO immeuble
      (Id, adrNum, adrVoie, adrCodePostal, adrVille, fibreOptique, parkingPrivatif)       (Id, adrNum, adrVoie, adrCodePostal, adrVille, fibreOptique, parkingPrivatif) 
Ligne 53: Ligne 54:
 </code> </code>
 <code> <code>
--- Insertion de deux appartements, l’un avec sans place de parking, l’autre avec une place de parking, et+-- Insertion de deux appartements, l’un sans place de parking, l’autre avec une place de parking, et
 -- les deux ayant un prix de place de parking -- les deux ayant un prix de place de parking
--- La première insertion doit échouer, la seconde réussir. 
 INSERT INTO appartement INSERT INTO appartement
      (immeuble, num, description, loyer, superficie, terrasse, classeConso, chauffage, placeParking, prixParking)       (immeuble, num, description, loyer, superficie, terrasse, classeConso, chauffage, placeParking, prixParking) 
Ligne 65: Ligne 65:
  
 ===== A vous de jouer ! ===== ===== A vous de jouer ! =====
-  - Adapter les triggers précédents afin de vérifier la contrainte suivante : un appartement ne peut avoir de place de parking si l’immeuble n’a pas de parking privatif ; +  - Adapter les triggers précédents afin de vérifier la contrainte suivante : un appartement ne peut pas avoir de place de parking si l’immeuble n’a pas de parking privatif ; 
-  - On souhaite que la contrainte suivante soit vérifiée : la superficie totale d’un appartement doit être égale à la somme de la superficie de chacune de ses pièces. Pour ce faire, créer les triggers nécessaires. +  - On souhaite que la contrainte suivante soit appliquée: la superficie totale d’un appartement doit être égale à la somme de la superficie de chacune de ses pièces. Pour ce faire, créer les triggers nécessaires. 
     - Combien en créez-vous ? sur quels événements ? sur quelle(s) tables() ?     - Combien en créez-vous ? sur quels événements ? sur quelle(s) tables() ?
     - Comment les appelez-vous ?     - Comment les appelez-vous ?
-  - Créer le trigger qui initialise la superficie de l’appartement à 0 à l’insertion d’un appartement ;+  - Gérer par défaut la superficie de l’appartement à 0 à l’insertion d’un appartement ;
  
 ===== Tests unitaires ===== ===== Tests unitaires =====
  
-  * Insérer une pièce de superficie X et constater que la superficie de l’appartement à augmenter de X.  +  * définissez les tests unitaires à réaliser et réalisez-les
-  * Supprimer une pièce, constater la mise à jour de la superficie. +
-  * Modifier la superficie d’une pièce, constater la mise à jour de la superficie.  +
-  * ... +
- +
  
 +====== D4-A07 : Exercice applicatif sur les déclencheurs : (2) Gestion de commandes de formations ou de livres ======
 +  - {{ :promo_2025:slam:tp_-_sql_et_triggers_-_commandes_specifiques.pdf |sujet}}
 +  - [[https://drive.google.com/file/d/1JynVFIqUft3DgjSzBuyNBNv3LyxueRC3/view?usp=drive_link|script base de données]]
  
  
  • sio2/d4-a07-exercice_applicatif_sur_les_declencheurs.1732790004.txt.gz
  • Dernière modification : 2024/11/28 11:33
  • de dthevenot