Activité Gestion d’un magasin de vente de détail

Consigne

Avant de commencer, veuillez lire une première fois le document dans son ensemble.

Le travail est individuel. Vous pouvez communiquer en respectant le code d’honneur. Si vous être bloqué, demandez de l’aide afin de ne pas prendre trop de retard.

Situation

Vous êtes responsable de la base de données pour un magasin de vente au détail. Vous devez créer la base de données, insérer des données, vérifier l’intégrité des données et effectuer des opérations de sauvegarde et de restauration. Vous devez également utiliser des contraintes pour assurer l’intégrité des données.

Objectifs

À la fin de ce travail, vous devez :

  • Être capable d’interpréter correctement un modèle de données logique relationnel.
  • Être capable d’implémenter le modèle dans un SGBD (Système de Gestion de Base de Données).
  • Être capable de garantir l’intégrité référentielle avec des contraintes.
  • Être capable d’insérer des données avec des commandes DML.
  • Être capable d’importer des données en masse à partir d’un fichier CSV.
  • Être capable de vérifier l’exhaustivité et l’intégrité des données insérées.
  • Être capable de corriger les données erronées.
  • Être capable d’effectuer des sauvegardes et restaurations.

Résultat attendu

Une mise à jour de votre résumé tenant, au maximum, sur une page A4 que vous devez déposer sur Moodle

Ressources

Mise en route

  • Connectez-vous au serveur de bases de données qui vous a été attribué au module 164.

  • Effectuez les tâches demandées les une après les autres.

À vous de jouer !

Tâches

Créer les tables

Créez les tables suivantes et le modèle logique suivant en utilisant les contraintes d’intégrité adéquate:

  • Produits (id, nom, prix_unitaire, stock_disponible, id_categorie)

  • Categories (id, nom)

  • Clients (id, nom, prenom, adress, email)

  • Commandes (id, id_client, date_commande, montant_total)

  • Lignes_Commande (id, id_commande, id_produit, quantite, prix_unitaire)

Insérer les données

Table “Produits”

id (clé primaire) nom prix_unitaire stock_disponible id_caregorie (clé étrangère)
1 Télévision 499.99 1 1
2 shirt 19.99 1 2
3 Pomme 0.99 1 3

Table “Categories”

id (clé primaire) nom
1 Électronique
2 Vêtements
3 Alimentation

Table “Clients”

id (clé primaire) nom prenom adresse email
1 Dupont Jean 123 Rue de la Liberté jean.dupont@example.co
2 Martin Marie 456 Avenue des Roses marie.martin@example.com

Table “Commandes”

id (clé primaire) id_client date_commande montant_total
1 2 2024-06-01 519.97
2 1 2024-06-02 19.99

Table “Lignes_Commandes”

id (clé primaire) id_commande id_produit quantite prix_unitaire
1 1 1 1 419.99
2 1 2 1 19.99
3 2 2 1 19.99

Importer des données en masse

On vous demande de créer un fichier CSV afin de pouvoir importer en masse les données

Vérifier l’exhaustivité et l’intégrité des données insérées

On vous demande de vérifier au minimum pour les données insérées :

  • Que tous les produits ont un prix supérieur à 0

  • Que tous les stocks sont supérieurs ou égaux à 0

  • Que toutes les commandes ont une date inférieure ou égale à la date actuelle

  • Que toutes les commandes ont un montant total supérieur à 0

Corriger les données erronées

On vous demande de corriger au minimum les données suivantes:

  • Mettre à jour le prix d’un produit erroné

  • Mettre à jour le stock d’un produit erroné

Sauvegarder et restaurer la base de données

  • Sauvegarder la base de données
  • Supprimez-la
  • Restauration de la base de données

Opérations de test pour les contraintes

Test de la contrainte CHECK sur les produits

INSERT INTO Produits (ID_Produit, Nom_Produit, Prix_Unitaire, Stock_Disponible, ID_Categorie) 
VALUES (7, 'Produit Erroné', -10, 50, 1); -- Doit échouer

Test des clauses ON DELETE et ON UPDATE

-- Suppression d'un produit et vérification du comportement en cascade
DELETE FROM Produits WHERE ID_Produit = 1;

-- Mise à jour d'un produit et vérification du comportement en cascade
UPDATE Produits SET ID_Produit = 8 WHERE ID_Produit = 2;

Test de la contrainte CHECK sur les commandes

INSERT INTO Commandes (ID_Commande, ID_Client, Date_Commande, Montant_Total) 
VALUES (3, 1, '2024-01-01', 100.00); -- Doit échouer si date future