TP Introduction aux Bases de Données 2 e année, ENSPS Janvier 2005 Objectifs du projet Ce TP est destiné à concrétiser certaines notions utilisées dans les bases de données, notions qui ont été abordées lors du cours. Nous allons étudier la conception et l implémentation d une base de données d entreprise, et en particulier la modélisation d un Data Warehouse pour une chaîne de supermarchés. Première partie : modélisation Les informations suivantes ont été obtenues de l administration de l entreprise : 1. L entreprise est organisée en plusieurs magasins, chaque magasin est identifié par un numéro et il est caractérisé par une adresse. 2. La stratégie principale de l entreprise est la vente d une gamme d articles dans les magasins. Les mêmes articles sont disponibles dans tous les magasins au même prix. La T.V.A. peut être différente pour chaque article : pour chaque article il existe donc un prix hors taxe (HT) et un prix toutes taxes comprises (TTC). Chaque article est identifié par un numéro à cinq chiffres. L association d un article donné à un numéro est temporelle : si un article est effacé de la gamme, son numéro peut être utilisé pour un autre article. Pour cette raison, l intervalle de validité d un article est à enregistrer dans la BD. De la même façon, tous les attributs d un article donné (prix, description, fournisseur) peuvent être changés à tout moment. L historique de toutes les associations article-propriétés doit être conservé. 3. Les achats de l entreprise sont gérés de la façon suivante : chaque article est livré par un fournisseur, dont nous connaissons le nom et l adresse. Le même fournisseur livre l article à tous les magasins de la chaîne. Un fournisseur peut fournir plusieurs articles à l entreprise. Les produits arrivent dans les magasins par des livraisons. Un fournisseur peut éventuellement effectuer des livraisons du même article plusieurs fois par jour (ex. : un boulanger). Une livraison peut comprendre plusieurs articles à quantités différentes. Pour chaque article livré dans un magasin, l association à sa livraison doit être conservé dans la BD. 4. Les ventes sont gérées de la façon suivante : certains clients sont référencés dans l organisation à l aide d une carte de fidélité. Lors d une vente nous gardons l identité du client (si connue), le mode de paiement, la date et l heure, ainsi que la quantité de tous les produits achetés (les lignes du ticket de caisse). En cas de vente anonyme (le client ne dispose pas d une carte de fidélité), la vente est enregistrée comme étant effectuée par un client virtuel (commun à toutes les ventes anonymes). Pour chaque article vendu, c.à.d. pour chaque ligne de ticket de caisse, l association à sa vente doit être conservée dans la BD. Si un client souhaite repartir ses achats en 1
deux parties (par exemple afin de payer avec deux moyens différents), cette opération est considérée comme deux ventes différentes. 5. Les articles sont organisés de façon hiérarchique selon leur type en différents sous groupes, groupes et domaines. Chaque article est associé à un sous groupe, qui est caractérisé par un numéro à 4 chiffres et une description (e.g. (1113, Eaux Minérales ), (1321, Jus d oranges ), (2309, Pneus Vélos )). A chaque sous groupe est associé un groupe, qui est caractérisé par un numéro à 3 chiffres et une description (e.g. (823, Boisson ), (212, Sport - Vélo )). A chaque groupe est associé un domaine, qui est caractérisé par un chiffre et une description. 1. En utilisant la base de connaissances décrite ci-dessus, concevoir un schéma conceptuel Entité/Association de l entreprise représenté en notation UML. Évitez les associations ternaires, représentez ces dernières par des associations binaires (plusieurs choix possibles!) 2. A partir du schéma conceptuel, développez le schéma logique en utilisant le modèle relationnel. Indiquez clairement pour chaque relation la clef primaire et les clefs étrangères. Afin d éviter les anomalies de mise à jour, tous les schémas doivent être transformés en troisième forme normale. 3. Implémentez le schéma logique en langage SQL (création de tables). 4. Remplissez les tables avec les données de test décrites dans l annexe. Deuxième partie : les requêtes Implémentez les requêtes suivantes en langage SQL : 1. Donner les descriptions des articles étant valide en ce moment et appartenant au groupe Boissons,. 2. Donner les noms des fournisseurs ensemble avec les nombres d articles fournis en ce moment et les prix moyens de ces articles. Attention : fourni en se ce moment n est pas égale à livré aujourd hui! 3. Donner une liste de toutes les couples client/magasin possible et pour chaque couple le nom du client, la description du magasin et le nombre de ventes effectuées dans ce magasin à ce client. Si un client n a jamais visité un magasin donné, le résultat contiendra néanmoins une ligne ayant le nombre de ventes égale à zéro. Trier la liste par nom de client et ensuite par description de magasin. 2
Troisième partie : les données redondantes Fidèle aux principes d un Data Warehouse, notre BD stocke des informations redondantes pour accélérer les accès aux données. 1. En utilisant le schéma développé dans le cadre de la première partie, une recherche sur les propriétés d un article demande comme argument la date de validité. Pour faciliter l accès aux données courantes, c.à.d. les propriétés actuelles de la gamme d articles, nous allons créer une relation CourArticle. Cette relation contiendra seulement une ligne par article, c.à.d. la ligne contenant les propriétés actuelles. Créez le schéma logique de cette relation. Implémentez la relation en langage SQL. Créez une ou plusieurs instructions SQL permettant d effacer le contenu de la table CourArticle et de le recalculer. 2. Afin d accélérer davantage les accès, nous allons créer plusieurs tables stockant des données agrégées : ag client annee (numclient F K, Annee, valeurventeht, valeurventettc) ag groupe magasin mois (numgroupe F K, nummagasin F K, Annee, Mois, valeurachat, valeurventeht, valeurventettc) Les valeurs mentionnées ci-dessus sont à calculer en respectant le tableau suivant : Valeur valeurachat valeurventeht valeurventettc Description La valeur totale de tous les articles achetés, calculée en multipliant la quantité achetée avec le prix d achat. La valeur totale de tous les articles vendus, calculée en multipliant la quantité vendue avec le prix de vente hors taxe. Comme la valeur précédente, mais à base du prix TTC. Les valeurs sont consolidées sur plusieurs articles, e.g. en sommant sur tout un groupe ou sur tous les articles achetés par un client. Implémentez les relations données ci-dessus en langage SQL. Développez des scripts SQL pour remplir ces relations à partir des données détaillées modélisées dans la première partie du TP. Chaque script prendra comme argument la date de la période à recalculer, c.à.d. le mois et/ou l année selon le type de la relation. Remarque : Les relations contiendront une ligne pour chaque clef primaire, même s il n y a pas eu de ventes ou de livraisons pendant cette période / pour ce groupe / à ce client. 3. Afin de pouvoir accéder aux quantités d articles stockés dans chaque magasin, nous allons créer une relation stock. Elle contient pour chaque jour de l année (plus spécifiquement, pour la fin de la journée) et pour chaque magasin, les quantités stockées de chaque article : 3
stock (numarticle F K, nummagasin F K, date F K, quantite) Implémentez la relation stock donnée ci-dessus. Initialisez la table pour la première journée considérée dans la BD : mettez les quantités stockées égales à 10 pour tous les articles dans la journée 2003-12-31. Créez une instruction SQL pour calculer le stock d une journée à partir du stock de la veille et des opérations de la journée même, c.à.d. les livraisons et les ventes. L argument du script SQL (c.à.d. la date de la journée mise à jour) est à initialiser dans l entête du script : set @DATE2UPDATE = 20034-01-01 Remarques : La relation stock contiendra pour chaque jour une ligne par article et par magasin, même s il n y a pas eu de ventes ou de livraisons de cet article pendant cette journée. L instruction SQL doit être applicable à la journée courante ( aujourd hui ) aussi bien qu à une journée du passé. 4
Annexe Organisation du TP Ce projet fera l objet d un compte rendu écrit à rendre à la scolarité au plus tard deux semaines après la dernière séance. Le compte rendu contiendra les schémas conceptuels et logiques et tout les scripts écrits, complété par une explication du travail. Tous les choix sont à justifier, en particulier le choix des jointures. Environnement informatique L implémentation du TP est à faire sur la machine davignon.u-strasbg.fr. Chaque groupe travaille sur un compte différent et sur une base de données différente. Demander aux encadrants de TP votre nom de compte et votre mot de passe. Chaque groupe travaille sur sa propre base de données, dont le nom est égal au nom du compte. Dans un terminal ouvert sur la machine, vous pouvez démarrer une séance interactive de SQL par la commande mysql -u <nom-utilisateur> -p<mot-de-passe> <nom-bd> ou exéctuer un script SQL enregistré dans un fichier par la commande mysql -u <nom-utilisateur> -p<mot-de-passe> <nom-bd> < <nom-fichier> Une sauvegarde de la base de données peut être effectuée dans un fichier par la commande mysqldump -u <nom-utilisateur> -p<mot-de-passe> <nom-bd> > <nom-fichier> Attention! Pas d espace entre l option -p et le mot de passe! Si vous voulez éviter l affichage du mot de passe sur l écran, déclarez l option -p sans argument. Le mot de passe vous est alors demandé interactivement. Redaction de scriptes SQL Rédigez un fichier.sql différent pour chaque problème. Si vous décomposez un problème en plusieurs instructions SQL, mettez toutes les instructions du problème dans le même fichier.sql. Les données de test Les données suivantes sont à insérer dans la BD : 1. Trois fournisseurs effectuent des livraisons à l entreprise : Trec, ayant l adresse 13, Rue Mercx, 67000 Strasbourg, Glu Glu, ayant l adresse 78, Place Wilson, 69100 Villeurbanne et BB ayant l adresse 10, Place Kleber, 67000 Strasbourg. 2. La hiérarchie d articles est la suivante : deux domaines existent : Alimentation et Non- Alimentation. Le domaine alimentation comprend les groupes Boissons et Produits de boulangerie, le domaine Non-Alimentation comprend le groupe Sport - Vélo. Le groupe Boissons comprend les sous groupes Eaux Minerales et Jus d orange, le 5
groupe Produits de boulangerie comprend le sous groupe Pains, le groupe Sport - Vélo comprend le sous groupe Vélos. 3. L entreprise vende 4 articles : L article pain de mie 750g, fournis par BB, fait partie du sous groupe Pains. Cet article à été introduit dans la gamme le 2002-01-01 à un prix de 0,90E (HT) et de 0.99E (TTC). Le prix de vente à été changé à 0.85E (HT) et à 0.94E (TTC) le 2004-01-24. Depuis l introduction de l article, le prix d achat a été 0.79E. L article est encore en vente en ce moment. L article VTT Bianko est fournis par Trek et fait partie du sous groupe Vélos. Il a été introduit le 2003-12-10 à un prix de vente de 1250E (HT) et de 1500E (TTC) ainsi qu un prix d achat de 1200.50E. Le 2004-01-10, le fournisseur à baissé le prix d achat à 1150E. L article est encore en vente en ce moment. L article Avien, fournis par Glu Glu à 1.10E, fait partie du sous groupe Eaux Minerales. Il a été introduit le 2004-01-01 à un prix de vente de 1.20E (HT) et de 1.32E (TTC). L article est encore en vente en ce moment. L article Troupicana, fournis par Glu Glu à 2.50E, fait partie du sous groupe Jus d Oranges. Il a été introduit le 2001-02-14 à un prix de vente de 2.70E (HT) et de 2.97E (TTC). L article à été supprimé de la gamme le 2004-02-04. 4. Deux clients sont reférencés dans le système : M. Jean Dupont habitant à 13, Cours Emile Zola, 67400 Illkirch-Graffenstaden et Mlle. Agnes Loupias habitant à 76, petite rue de la course, 6700 Strasbourg. 5. La chaîne comprend deux magasins, se situant à 12, Route de l avenir, 67400 Illkirch- Graffenstaden et 45, Place du Marche, 67000 Strasbourg 6. Les livraisons suivantes ont été effectuées (toutes à 1 heure de l après-midi) : Le 2004-01-15 : 10 VTT dans le magasin à Illkirch ; Le 2004-01-15 : 15 VTT dans le magasin à Strasbourg ; Le 2004-01-01 : 20 VTT à Strasbourg ; Le 2004-01-01 : 100 pains de mie à Strasbourg ; Le 2004-01-28 : 10 Avien à Strasbourg. 7. Les ventes suivantes ont été effectuées (toutes à 2 heures d après-midi ; tous les réglements ont été effectués par carte bancaire) : Mlle. Loupias a achété : le 2004-01-20 : 1 pain de mie et 2 avien à Strasbourg ; le 2004-01-27 : 1 pain de mie à Illkirch ; M. Dupont a achété : le 2004-01-02 : 1 VTT à Strasbourg ; le 2004-01-15 : un troupicana et deux avien à Strasbourg ; Un client non identifié a acheté : le 2004-01-01 : 2 Troupicana à Illkirch ; Un client non identifié a acheté : le 2004-01-13 : 1 VTT et 5 Troupicana à Strasbourg ; Un client non identifié a acheté : le 2004-01-24 : 2 pains de mie et 1 Troupicana à Strasbourg ; 6