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