Conception et construction d`une base de données
Transcription
Conception et construction d`une base de données
Conception et construction d’une base de données September 19, 2006 1 Présentation du problème Les restaurants de l’agglomération lilloise se sont réunis pour créer une association de commerçants. Ils veulent concevoir un site internet sur lequel seraient présentés les plats proposés dans les restaurants. 1.1 Les menus des restaurants L’association regroupe les restaurateurs d’une vingtaine de villes. Le restaurant sera simplement décrit par son nom, son nombre d’étoiles, le nombre de tables et le nombre de couverts (nombre de personnes pouvant y manger simultanément). Le but est de présenter les différents plats que le client pourra consommer. Les restaurateurs estiment que chaque plat de leur restaurant est unique. Les Crosnes du Japon à la Polonaise du restaurant La Tour Cachée sont uniques ; le Miroton à la Piémontaise du restaurant Le Beffroi Bleu est unique... Et donc le Cassoulet du restaurant La Tour Cachée est différent du Cassoulet du restaurant Le Beffroi Bleu. Donc chaque plat est unique et n’est proposé que par un seul restaurant même s’il porte le même nom, dans un autre restaurant. Les restaurants vont faire preuve d’inventivité pour donner des noms particuliers à leurs plats ; la redondance dans les noms de plats n’est pas considéré comme un handicap. Les restaurateurs se sont accordés sur une liste de catégories (hors d’œuvre, entrée, plat principal,..., dessert) et ils indiqueront, pour chacun de leur plat, dans quelle catégorie ils souhaitent le ranger. Chaque plat sera classé dans une seule catégorie. Il existe deux formules de constitution d’un repas : au menu ou à la carte. Un menu est une proposition limitée de plats ; en général, un menu propose quelques plats dans la catégorie entrée, quelques plats dans la catégorie plat principal... Dans la formule à la carte, le client choisit les plats qu’il veut consommer dans une liste, la carte. Certains restaurants ne proposent que des repas au menu, certains ne proposent que la carte et les autres proposent les deux formules. Dans un restaurant (qui a adopté la formule au menu), un plat peut être proposé dans plusieurs menus. Dans un restaurant (qui a adopté la formule à la carte), un même plat n’apparaît pas plusieurs fois dans la carte. Certains plats peuvent être proposés dans des menus et ne pas apparaître dans la carte, et inversement, certains plats peuvent être proposés à la carte et ne pas apparaître dans les menus. 1.2 Les ingrédients Les noms des plats, parfois imprégnés de poésie, sont peu évocateurs du contenu. Pour faciliter le choix des clients, les restaurateurs pourront indiquer les ingrédients composant les plats. Ainsi un client végétarien pourra éliminer certains plats de ses choix... Mais certains restaurateurs répugnent à divulguer leurs secrets ; la composition des plats ne sera pas toujours donnée ou elle pourra être incomplète. Les types auxquels appartiennent les ingrédients seront aussi mémorisés : légumes, céréales, viande, poisson,... La liste de ces types a été établie en accord avec les restaurateurs de telle façon qu’un ingrédient n’appartienne qu’à un seul type. 1 2 Modèle conceptuel des données Vous commencez par faire le dictionnaire des données en faisant un inventaire de toutes les informations à mémoriser. Puis, vous structurez ce dictionnaire en regroupant les informations qui correspondent aux mêmes entités. Enfin, vous dessinez le MCD en faisant apparaître les entités, les associations et les cardinalités. 3 Modèle logique des données Donnez le MLD correspondant au MCD. 4 Modèle physique des données Pour cette partie, vous ne vous occuperez que de la partie de la base de données qui décrit les restaurants et les plats qu’ils proposent, sans vous occuper des ingrédients, ni même des catégories. Vous choisissez pour chaque propriété, le type de données qui est le mieux adapté, parmi ceux dont dispose le logiciel qui va vous servir au développement de votre base de données. OpenOffice propose plusieurs types d’entiers (SMALLINT, INTEGER,...), de réels (NUMERIC, REAL,...), de chaînes de caractères (CHAR, VARCHAR,...), les types BOOLEAN, DATE, TIME, TIMESTAMP (date et heure),.... 5 Réalisation avec OpenOffice Ouvrez le logiciel OpenOffice-Base. Créez une base de données sur votre compte. Il n’est pas nécessaire que l’assistant enregistre votre base dans OpenOffice ; ce n’est qu’une base de travail temporaire. Vous ouvrez la base de données pour édition. Le logiciel s’ouvre sur la fenêtre de la figure 1 ; les onglets, sur la gauche de la fenêtre, vous permettent de visualiser les tables, les requêtes, les formulaires ou les rapports. Figure 1: fenêtre d’ouverture de OpenOffice September 19, 2006 à 15h34 2/8 September 19, 2006 à 15h34 5.1 Création des tables Créez les tables dans cette base de données. Pour cela, cliquez sur créer une table en mode Ebauche. Vous obtenez la fenêtre de définition d’une table (voir figure 2) qui vous permet d’indiquer les noms des champs, leurs types et d’éventuelles informations complémentaires. Figure 2: fenêtre de définition des champs d’une table Pour indiquer qu’un champ est une clé primaire, il faut le sélectionner et cliquer avec le bouton droit de la souris. Si la clé primaire est constituée de plusieurs champs, il faut sélectionner ces différents champs. Aucune saisie ne sera autorisée dans une table si la clé primaire n’est pas définie. Vous ne créerez les tables que pour la partie de la base de données qui concerne les restaurants et les menus ; vous ne vous occuperez pas des recettes, des ingrédients. Pour comprendre l’importance d’un choix correct des types, choisissez le type smallint pour le code postal des villes. Vous constaterez au moment de saisir quelques villes que ce choix pose problème. Lorsque deux tables sont reliées dans le MLD, elles partagent une information commune. Il est important de choisir le même type pour les champs qui constituent cette relation. 5.2 Création des relations Lorsque les tables sont créées, on définit les relations (Outils - Relations) entre les tables. Cette étape est importante. Elle permettra un contrôle des relations par le système de gestion de bases de données. Prenons pour exemple la relation entre les restaurants et les villes. Si on indique que ces deux tables sont en relation, il sera impossible de saisir, dans la table des restaurants, une référence de ville qui n’existerait pas. Si, de plus, on a interdit la valeur null pour le champ RefVille, on ne peut créer un restaurant qu’en précisant dans quelle ville il se trouve et cette référence doit être correcte. On peut demander que le système s’occupe de maintenir des références correctes. September 19, 2006 à 15h34 3/8 September 19, 2006 à 15h34 Figure 3: fenêtre de définition des relations de la base Si on coche l’option mise à jour en cascade, une modification du CodeVille sera répercutée dans tous les restaurants qui sont liés à cette ville. Si on coche l’option définir null, une modification du CodeVille qui briserait le lien entre des restaurants et une ville entraînerait l’affectation de la valeur null à tous les restaurants qui sont liés à cette ville. Si on coche l’option définir par défaut, une modification du CodeVille qui briserait le lien entre des restaurants et une ville entraînerait l’affectation de la valeur définie par défaut à tous les restaurants qui sont liés à cette ville. Si aucune option n’est cochée, on ne peut pas modifier le code d’une ville dès lors qu’un restaurant effectue une référence à cette ville. Définissez les relation suivantes : Tables Restaurants - Villes Restaurants - Plats Restaurants - Menus Categories - Plats Menus - contenus Plats - contenus 5.3 Options de mise à jour aucune action mise à jour en cascade aucune action définir null mise à jour en cascade mise à jour en cascade Saisie de données Saisissez quelques enregistrements dans chacune des tables. Puis modifiez le code d’une ville (ou plutôt constatez que vous avez un message d’erreur si vous tentez de le faire). On annule une modification en cours en tapant sur la touche esc du clavier. Modifiez un code d’un plat et constatez la mise à jour dans la table des contenus. Modifiez un code de catégories et constatez la mise à jour dans la table des plats. Modifiez un numéro de restaurant et constatez l’impossibilité. September 19, 2006 à 15h34 4/8 September 19, 2006 à 15h34 6 Requêtes Réalisez les requêtes suivantes. 1. Affichez les plats figurant à la carte des restaurants (proposant une carte) de Lille. L’affichage sera effectué par restaurant et par prix croissant. 2. Affichez le nombre de couverts par ville (c’est à dire le nombre de couverts cumulés pour tous les restaurants de chaque ville). 3. Affichez le prix moyen des menus pour chaque restaurant ayant plus de 2 étoiles. 4. Affichez le nom du restaurant proposant le menu le moins cher. September 19, 2006 à 15h34 5/8 September 19, 2006 à 15h34 Correction du modèle conceptuel des données Le nom de l’entité est en majuscules, l’identifiant est souligné. Catégories CodeCatégorie LibelléCatégorie 0:n classé dans N 1:1 Villes CodeVille Ville Plats CodePlat NomPlat 0:1 1:n carte prix lieu 1:1 Restaurants NoRestaurant NomRestaurant NombreEtoiles NombreTables NombreCouverts contient N 0:n 0:n September 19, 2006 à 15h34 0:n 1:n propose ◮ 1:1 Menus NoMenu NomMenu PrixMenu 6/8 0:n recette 0:n Ingrédients CodeIngrédient NomIngrédient 1:1 appartient à N 0:n Types CodeType LibelléType September 19, 2006 à 15h34 Modèle logique des données Le nom de l’entité est en majuscules, l’identifiant est souligné, les références sont en italiques. Catégories CodeCatégorie LibelléCatégorie CodeCatégorie = RefCatégorie CodePlat = RefPlat Plats CodePlat NomPlat RefCatégorie RefRestaurant Prix Villes CodeVille Ville recettes RefPlat RefIngrédient CodeIngrédient = RefIngrédient Ingrédients CodeIngrédient NomIngrédient RefType CodePlat = RefPlat NoRestaurant = RefRestaurant contenus RefPlat RefMenu CodeVille = RefVille CodeType = RefType NoMenu = RefMenu Restaurants NoRestaurant NomRestaurant NombreEtoiles NombreTables NombreCouverts RefVille September 19, 2006 à 15h34 NoRestaurant = RefRestaurant Menus NoMenu NomMenu PrixMenu RefRestaurant 7/8 Types CodeType LibelléType September 19, 2006 à 15h34 Requêtes 1. TABLES OUVERTES JOINTURES CHAMPS AFFICHÉS CRITÈRES TRIÉ PAR Villes, Restaurants, Plats Villes.CodeVille = Restaurants.RefVille Restaurants.NoRestaurant = Plats.RefRestaurant Restaurants.NomRestaurant Villes.Ville = “Villeneuve d’Ascq” Restaurants.NomRestaurant Plats.Prix 2. TABLES OUVERTES JOINTURES CHAMPS AFFICHÉS REGROUPÉS PAR Villes, Restaurants Villes.CodeVille = Restaurants.RefVille Villes.Ville somme(Restaurants.NombreCouverts) Villes.CodeVille Villes.Ville 3. TABLES OUVERTES JOINTURES CHAMPS AFFICHÉS REGROUPÉS PAR CRITÈRES Restaurants, Menus Restaurants.NoRestaurant = Menus.RefRestaurant Restaurants.NomRestaurant moyenne(Menus.PrixMenu) Restaurants.NoRestaurant Restaurants.NomRestaurant Restaurants.NombreEtoiles >= 2 4. TABLES OUVERTES JOINTURES CHAMPS AFFICHÉS CRITÈRES et Restaurants, Menus, Contenus, Plats, Catégories, Recettes, Ingrédients, Plats Restaurants.NoRestaurant = Menus.RefRestaurant Menus.NoMenu = Contenus.RefMenu Contenus.RefPlat = Plats.CodePlat Plats.RefCatégorie = Catégories.CodeCatégorie Plats.CodePlat = Recettes.RefPlat Recettes.RefIngrédient = Ingrédients.CodeIngrédient Ingrédients.RefType = Types.CodeType Restaurants.NomRestaurant Catégories.LibelléCatégorie= “entrée” Types.LibelléType= “poisson” 5. Il faut deux requêtes : on calcule le prix minimum des menus, puis on cherche le(s) restaurant(s) correspondant. TABLES OUVERTES CHAMPS AFFICHÉS Menus min(PrixMenu) as MinPrix Enregistrée sous le nom MinPrixMenus TABLES OUVERTES JOINTURES CHAMPS AFFICHÉS Restaurants, Menus, MinPrixMenus Restaurants.NoRestaurant = Menus.RefRestaurant Menus.PrixMenu = MinPrixMenus.MinPrix Restaurants.NomRestaurant Menus.PrixMenu On peut indiquer la condition sur le prix soit comme une jointure, soit comme un critère. September 19, 2006 à 15h34 8/8 September 19, 2006 à 15h34