sio2:exercices_d_applications

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:exercices_d_applications [2025/03/14 10:22] dthevenotsio2:exercices_d_applications [2025/03/17 19:09] (Version actuelle) – [Quelle solution possible ?] dthevenot
Ligne 1: Ligne 1:
 ~~SLIDESHOW~~ ~~SLIDESHOW~~
 +====== Exemples de cas d'utilisation de triggers ======
  
 ====== 1) Utiliser des champs calculés ====== ====== 1) Utiliser des champs calculés ======
Ligne 7: Ligne 8:
 On imagine une base de données de gestion de commandes, afin de faciliter les calculs concernant les ventes réalisées, on souhaite :  On imagine une base de données de gestion de commandes, afin de faciliter les calculs concernant les ventes réalisées, on souhaite : 
    
-  - Ajouter les attributs totalHTLigne, totalTVALigne et totalTTCLigne à l’entité ligneCommande. Ces propriétés doivent être calculées.  +  - Gérer automatiquement les attributs totalHTLigne, totalTVALigne et totalTTCLigne à l’entité ligneCommande. Ces propriétés doivent être calculées.  
-  - Ajouter les attribut montantHT, montantTVA et montantTTC à l’entité Commande. Ces propriétés doivent être calculées automatiquement. +  - Gérer automatiquement les attributs montantHT, montantTVA et montantTTC à l’entité Commande. Ces propriétés doivent être calculées automatiquement. 
    
 **Quelle solution possible ?**  **Quelle solution possible ?** 
Ligne 51: Ligne 52:
  
 <code> <code>
--- Table des produits 
 CREATE TABLE produit ( CREATE TABLE produit (
     idProduit INT AUTO_INCREMENT PRIMARY KEY,     idProduit INT AUTO_INCREMENT PRIMARY KEY,
Ligne 57: Ligne 57:
     prixHt DECIMAL(10, 2),     -- Prix hors taxe     prixHt DECIMAL(10, 2),     -- Prix hors taxe
     tauxTva DECIMAL(5, 2),     -- Taux de TVA en pourcentage     tauxTva DECIMAL(5, 2),     -- Taux de TVA en pourcentage
-    typeProduit ENUM('alimentaire', 'electromenager') NOT NULL,  -- Type de produit +    typeProduit ENUM('alimentaire', 'electromenager') NOT NULL CHECK (
-    dateLimiteConsommation DATE,        -- Date limite pour produits alimentaires +
-    classeEnergetique VARCHAR(5),       -- Classe énergétique pour électroménager +
-    CHECK (+
         (typeProduit = 'alimentaire' AND dateLimiteConsommation IS NOT NULL AND classeEnergetique IS NULL) OR          (typeProduit = 'alimentaire' AND dateLimiteConsommation IS NOT NULL AND classeEnergetique IS NULL) OR 
         (typeProduit = 'electromenager' AND classeEnergetique IS NOT NULL AND dateLimiteConsommation IS NULL)         (typeProduit = 'electromenager' AND classeEnergetique IS NOT NULL AND dateLimiteConsommation IS NULL)
-    )                                   -- Vérification pour garantir la cohérence des types +    ),  -- Type de produit 
-);</code>+    dateLimiteConsommation DATE,        -- Date limite pour produits alimentaires 
 +    classeEnergetique VARCHAR(5    -- Classe énergétique pour électroménager 
 +            ; 
 +</code>
 <badge>A vous de jouer</badge> <badge>A vous de jouer</badge>
   - réimporter le script de création de la bd de gestion des commandes en changeant le nom de la base de données(gestionCommandeExo2) et changer la table produit pour la remplacer avec celle ci-dessus   - réimporter le script de création de la bd de gestion des commandes en changeant le nom de la base de données(gestionCommandeExo2) et changer la table produit pour la remplacer avec celle ci-dessus
Ligne 81: Ligne 81:
 **Explication des contraintes d'intégrité :** **Explication des contraintes d'intégrité :**
   * __Intégrité référentielle__ : Chaque produit alimentaire ou électroménager doit avoir une entrée correspondante dans la table produit. Cette intégrité est garantie par les clés étrangères (idProduit) dans les tables alimentaire et electromenager, qui pointent vers la table produit.   * __Intégrité référentielle__ : Chaque produit alimentaire ou électroménager doit avoir une entrée correspondante dans la table produit. Cette intégrité est garantie par les clés étrangères (idProduit) dans les tables alimentaire et electromenager, qui pointent vers la table produit.
-  * __Clé primaire partagée__ : Les tables spécialisées alimentaire et electromenager partagent la même clé primaire que la table produit, ce qui garantit qu'un produit ne peut être à la fois dans alimentaire et electromenager (grâce à l'unicité de la clé primaire idProduit)+  * __Clé primaire partagée__ : Les tables spécialisées alimentaire et électromenager partagent la même clé primaire que la table produit, ce qui doit permettre de garantir qu'un produit ne peut être à la fois dans alimentaire et électromenager
-  * __Suppression en cascade__ : Lorsqu'un produit est supprimé de la table produit, toutes les entrées associées dans les tables alimentaire et electromenager seront également supprimées automatiquement grâce à l'option ON DELETE CASCADE.+  * __Suppression en cascade__ : Lorsqu'un produit est supprimé de la table produit, l'entrée associée dans la table alimentaire ou électroménager sera également supprimée automatiquement grâce à l'option ON DELETE CASCADE.
  
-<alert type="success">Conclusion : ici besoin de déclencheur ! </alert>+<alert type="warning">Toutes les contraintes sont elles vérifiées ?</alert>
 <badge>A vous de jouer : testez chacune des 2 solutions</badge> <badge>A vous de jouer : testez chacune des 2 solutions</badge>
-<alert type="warning">CONSEIL : Travailler sur des bases de données différentes pour réaliser vos tests</alert>+<alert type="success">CONSEIL : Travailler sur des bases de données différentes pour réaliser vos tests</alert>
  
 ====== 3) Vérifier une contrainte d’associations  ====== ====== 3) Vérifier une contrainte d’associations  ======
 =====  Trigger pour vérifier une contrainte d'inclusion ===== =====  Trigger pour vérifier une contrainte d'inclusion =====
-On ajoute à notre gestion commerciale la gestion des livraisons des commandes : un produit ne doit pouvoir être livré que si il a été commandé et sa quantité livrée ne doit pas dépasser la quantité commandée bien sûr. On simplifie le cas en autorisant les livraisons des produits en une seule fois.+On ajoute à notre gestion commerciale la gestion des livraisons des commandes : un produit ne doit pouvoir être livré que si il a été commandé et sa quantité livrée ne doit pas dépasser la quantité commandée bien sûr. On simplifie le cas en définissant qu'une livraison ne concerne qu'une seule commande à la fois et un produit est livré en une seule fois.
  
 ===== Quels problèmes ? ===== ===== Quels problèmes ? =====
-  * Rien ne nous assure que les livraisons portent sur des produits commandés ;  +  * Rien ne nous assure que les livraisons portent sur les produits commandés correspondant ;  
-  * Rien ne nous assure que les quantités livrées ne soient pas supérieures à celles commandées. +  * Rien ne nous assure que les quantités livrées ne soient pas supérieures à celles commandées(si la quantité est inférieure il y aura un avoir non géré ici donc la quantité livrée inférieure ne pose pas de problème ici)
    
 ===== Quelle solution possible ? ===== ===== Quelle solution possible ? =====
    
   - A l’insertion comme à la modification d’une livraison, on vérifie à la livraison que le produit livré figure bien dans la commande qui concerne la livraison;    - A l’insertion comme à la modification d’une livraison, on vérifie à la livraison que le produit livré figure bien dans la commande qui concerne la livraison; 
-  - Toujours à l’insertion et à la modification d’une livraison, on vérifie que la quantité totale livrée du produit qu’on souhaite livrer soit au plus égal à la quantité commandée concernant ce même produit. +  - Toujours à l’insertion et à la modification d’une livraison, on vérifie que la quantité livrée du produit soit au plus égale à la quantité commandée concernant ce même produit (si la quantité est inférieure un avoir est créé, non géré ici mais cela ne pose pas de problème)
  
 Le 1er cas est réalisable avec des contraintes d'intégrité référentielle. Comment ? Le 1er cas est réalisable avec des contraintes d'intégrité référentielle. Comment ?
  • sio2/exercices_d_applications.1741944132.txt.gz
  • Dernière modification : 2025/03/14 10:22
  • de dthevenot