IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Schéma Discussion :

comment faire le MCD Cocktails ?


Sujet :

Schéma

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 1
    Points : 2
    Points
    2
    Par défaut comment faire le MCD Cocktails ?
    Bonjour, mon prof nous a donné une feuille à faire comme DM. Le problème c'est que je ne comprends pas l'énoncé. Enfin je comprends les questions mais je ne sais pas comment je peux faire ça.


    Voici l'énoncé:


    Nom des cocktails - Boisson de base - Ingrédients


    PASSION - Gin, Liqueur fruit de la passion (Passoa) - 4/10 Jus de pamplemousse, 2/10 Gin, 2/10 Passoa, 1/10 Cointreau, 1/10 Sirop de sucre de canne

    TEQUILA SUNRISE - Téquila - 7/10 Jus d'orange, 3/10 Téquila, Quelques gouttes de grenadine

    SANGRIA - Vin rouge - 1/8 Cognac, 1/8 Porto, 1/8 Cointreau, 5/8 Vin rouge, Cannelle, Gingembre, Sucre selon les goûts, Fruits de saison

    SOUPE CHAMPENOISE - Champagne - 10 cl de Cointreau, 10 cl de Sirop de sucre de canne, 10 cl de jus de citron, 1 bouteille de champagne.


    A partir de cette fiche, faire :
    - le dictionnaire des données
    - la matrice complète et simplifiée
    - le graphe des clés
    - les entités
    - le modèle conceptuel de données.

    Merci de m'aider !!!

  2. #2
    Expert éminent sénior
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    Septembre 2006
    Messages
    8 001
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Spécialiste en bases de données
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2006
    Messages : 8 001
    Points : 30 905
    Points
    30 905
    Billets dans le blog
    16
    Par défaut
    Bonsoir Roswellus,


    Vous écrivez :
    Voici l'énoncé
    Nom des cocktails - Boisson de base - Ingrédients
    On peut formaliser cet énoncé en le structurant sous la forme d’un prédicat :
    Le cocktail NomCocktail ayant pour boisson de base BoissonBase, est composé d’ingrédients Ingrédients.
    A son tour, ce prédicat fait l’objet d’une variable relationnelle, schématisée par un nom de variable (Cocktail) et une liste de noms d’attributs (NomCocktail, BoissonBase, Ingrédients) :
    Cocktail (NomCocktail, BoissonBase, Ingrédients)
    Avertissement : Formellement, un attribut est un couple <Ai, Ti> où Ai représente le nom de l’attribut et Ti son type. Bien que le typage soit fondamental, on fera l’impasse dans le cadre de cette discussion.

    Dans tous les sens du terme, chaque cocktail est unique, en vertu de quoi on l’identifie au moyen d’un (ou plusieurs) de ses attributs assurant la propriété d’unicité. En l’occurrence le nom du cocktail convient. Nous en prenons bonne note en soulignant NomCocktail :
    Cocktail (NomCocktail, BoissonBase, Ingrédients)
    Pour tenir compte des caractéristiques des ingrédients (à savoir la quantité des divers ingrédients entrant dans la composition d’un cocktail), nous complétons la liste des attributs :
    Cocktail (NomCocktail, BoissonBase, Ingrédients(NomIngrédient, Quantité))
    Là encore, il faut identifier chaque ingrédient sinon on pourrait avoir plusieurs fois le même ingrédient dans un cocktail, ce qui ne présenterait strictement aucun intérêt :
    Cocktail (NomCocktail, BoissonBase, Ingrédients(NomIngrédient, Quantité))
    Si l’on est dans le cadre de la théorie relationnelle, on peut en rester là (pour les initiés, la variable relationnelle Cocktail est en première forme normale).

    Si l’on se situe dans le cadre de l’approche Entité/Relation (E/R), en l’occurrence la méthode Merise, l’attribut Ingrédients est réputé non normalisé, car il est multivalué. Pour prendre votre 1er exemple (le cocktail Passion), on a plusieurs ingrédients : jus de pamplemousse, gin, passoa, cointreau, sirop de sucre de canne. Merise demande que l’on rende monovalué ce qui est multivalué, pas de cocktail si je puis dire... (Toujours pour les initiés, la première forme normale de Merise n’est pas celle de la théorie relationnelle : pour cette dernière, une variable relationnelle est automatiquement normalisée. Cette théorie propose les opérateurs (Group/Ungroup) permettant, disons au sens de la méthode Merise, de dénormaliser/normaliser les relations, ce qui n’est pas prévu par celle-ci (attention, selon la théorie relationnelle, une relation est une valeur prise par une variables relationnelle, à ne pas confondre avec la relation (relationship) de la méthode).

    En conséquence, si l’on veut se situer dans le cadre de l’approche E/R, la variable Cocktail est à décomposer ainsi : une première variable, toujours appelée Cocktail, mais débarrassée des ingrédients et une deuxième variable pour décrire ceux-ci :
    Cocktail (NomCocktail, BoissonBase)
    Ingrédient (NomCocktail, NomIngrédient, Quantité)
    Vous observerez que le terme "Ingrédients" est désormais singulier : "Ingrédient". En effet, les énoncés portent désormais sur des données normalisées, atomiques, monovaluées. Par ailleurs, la variable Ingrédient est identifiée par le couple {NomCocktail, NomIngrédient} puisque le nom du cocktail doit évidemment être présent (sinon comment faire le lien entre un cocktail et ses ingrédients ?) mais ne suffit plus à lui seul. On dit encore que l’identification de Ingrédient est relative.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
      Cocktail (NomCocktail,      BoissonBase)
                Passion           Gin, Liqueur fruit de la passion (passoa)
                Téquila sunrise   Téquila 
                Sangria           Vin rouge
                Soupe champenoise Champagne
                   ...
    
      Ingrédient (NomCocktail,    NomIngrédient,       Quantité)
                  Passion         Jus de pamplemousse    4/10
                  Passion         Gin                    2/10
                  Passion         Passoa                 1/10
                    ...
    Vous observerez que "Jus de pamplemousse", "Gin", etc. ne sont plus les éléments d’une liste, mais sont désormais des valeurs atomiques.

    Concernant l’attribut BoissonBase, on pourrait faire observer que la valeur "Gin, Liqueur fruit de la passion (passoa)" n’est pas une valeur atomique et devrait donc aussi être atomisée en "Gin" et "Liqueur fruit de la passion (passoa)". Néanmoins, il s’agit là de la représentation d’une information à prendre comme un tout et donc non décomposable du point de vue du système.

    Les concepteurs préfèrent identifier les variables par des attributs dont les valeurs ne sont pas susceptibles de changer au fil des corrections d’erreurs ou des caprices des utilisateurs. Aussi, utilisent-ils à cet effet des substituts qui sont des invariants. Ils ont bien raison. Imaginez cent tables de cent millions de lignes en moyenne, dont il faille remplacer des valeurs d’identifiants : si par exemple il s’agit du numéro INSEE et que l’INSEE vous envoie 10% de correctifs par mois : la production informatique peut exploser. Et puis, il peut y avoir des jumeaux parfaits quant à leurs propriétés naturelles (pas dans votre cas, en principe). En tout état de cause, la liste des attributs des variables Cocktail et Ingrédient peut évoluer, par intégration d’un attribut identifiant parfaitement stable, car non significatif, dont les valeurs sont des entiers (incrémentation de un en un, technique la plus courante, mais il existe d’autres procédés, par exemple l’utilisation d’horodateurs à la microseconde ou à la picoseconde, si votre système l’autorise). L’attribut NomCocktail est colorié pour montrer que de statut d’identifiant, il est passé à celui d’identifiant alternatif : l’attribut IdCocktail s’est substitué à lui, mais il reste contraint à être unique. Même principe pour l’attribut IdIngrédient, qui continue à participer à la contrainte d’unicité, couplé à IdCocktail. A noter que les valeurs de IdIngrédient commencent à 1 pour chaque cocktail : on procède en l’occurrence à une identification relative cf. plus haut).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    Cocktail (IdCocktail, NomCocktail,      BoissonBase)
                   1      Passion           Gin, Liqueur fruit de la passion (passoa)
                   2      Téquila sunrise   Téquila 
                   3      Sangria           Vin rouge
                   4      Soupe champenoise Champagne
                  ...
    
    Ingrédient (IdCocktail, IdIngrédient, NomIngrédient,       Quantité)
                    1            1        Jus de pamplemousse    4/10
                    1            2        Gin                    2/10
                    1            3        Passoa                 1/10
                   ...
                    4            1        Cointreau              10cl
                    4            2        Champagne              1 bouteille
                   ...
    Concernant la quantité des ingrédients : vos exemples mettent en jeu des proportions (le dixième, le huitième, ...), des unités de mesure (le centilitre, la bouteille), voire des indications approximatives ou vagues (quelques gouttes, fruits de saison...) Dans la mesure où vous souhaiteriez effectuer des opérations arithmétiques ou de comparaison sur des nombres, vous pourriez envisager la mise en œuvre d’un attribut Unité, en sorte que l’attribut Quantité ne prenne pas des valeurs telles que "10cl" ou "1 bouteille", mais les valeurs 10, 1, etc. en association avec l’attribut Unité ("cl", "bouteille", etc.) Attention quand même au problème délicat des indications approximatives et vagues, car elles ne sont pas concernées par les opérations arithmétiques.
    Mais il existe 36 façons de traiter cela et vous risquez donc d’avoir à lire autant de messages donnant des solutions toutes plus intéressantes les unes que les autres : si cela vous convient, choisissez celle qui vous paraît la meilleure !

    Par ailleurs, certains ingrédients sont utilisés simultanément pour des cocktails différents. Ainsi, le sirop de sucre de canne est utilisé pour le cocktail Passion et pour la soupe champenoise. Dans ces conditions, les concepteurs aiment bien définir une variable à cet effet, d’où les relations (valeurs de variables relationnelles) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
     
    Cocktail (IdCocktail, NomCocktail,      BoissonBase)
                   1      Passion           Gin, Liqueur fruit de la passion (passoa)
                   2      Téquila sunrise   Téquila 
                   3      Sangria           Vin rouge
                   4      Soupe champenoise Champagne
                  ...
    
    Ingrédient (IdIngrédient, NomIngrédient)
                     1        Jus de pamplemousse
                     2        Gin
                     3        Passoa
                     4        Sirop de sucre de canne
                     5        Cointreau 
                     6        Champagne
                    ... 
    
    Composition (IdCocktail, IdIngrédient,  Quantité)
                     1            1          4/10
                     1            2          2/10
                     1            3          2/10
                     1            4          1/10
                     1            5          1/10
                    ...
                     4            4          10cl
                     4            5          10cl
                     4            6          1 bouteille
                    ...
    Schémas conceptuels

    Il est d’usage de fournir un schéma conceptuel (Modèle conceptuel de données, MCD).

    Sans "ronds", rien qu’avec des rectangles (ou quasi). En l’occurrence avec Toad Data Modeler (freeware). Ce schéma se lit ainsi :

    Les rectangles représentent des entités-types indépendantes (qui ne dépendent pas d’autres entités-types).
    Quand les coins sont arrondis, cela veut dire que l’entité-type est dépendante. Dans le cas de Composition, la dépendance est double et cette entité-type est alors dite associative.
    L’entité-type indépendante Cocktail a pour attributs IdCocktail (identifiant) et NomCocktail.
    L’entité-type indépendante Ingrédient a pour attributs IdIngrédient (identifiant) et NomIngrédient.
    L’entité-type associative Composition a pour attributs IdCocktail et IdIngrédient, hérités des deux autres entités-types, tels que l’identifiant de Composition est composé du couple {IdCocktail, IdIngrédient} (équivalence avec l’identification relative évoquée plus haut). Elle a pour autre attribut Quantité.
    Le trident à gauche signifie qu’un cocktail est composé de un à plusieurs (ingrédients), le trident de gauche signifie qu’un ingrédient entre dans la composition de zéro à plusieurs (cocktails).
    Les deux petites barres verticales jouxtant les rectangles signifient qu’une composition donnée concerne au moins et au plus un cocktail et au moins et au plus un ingrédient.
    Les termes PK et PFK signifient respectivement Primary Key et Primary Foreign Key mais peuvent être oubliés au niveau conceptuel, car ils concernent le niveau relationnel.



    Version Merise :



    La relation Composer remplace l’entité associative Composition. L’usage en Merise veut que pour nommer les relations, on utilise des verbes (Composer) plutôt que des noms (Composition). Les noms IdCocktail et IdIngrédient ne figurent pas dans la relation, ils y sont implicitement.
    Comme ci-dessus, un cocktail est composé de un à plusieurs (ingrédients) et un ingrédient entre dans la composition de zéro à plusieurs (cocktails).
    <pi> est l’abréviation de Primary Identifier et <ai> celui de Alternate Identifier (je suppose).

    Je vous laisse le soin de vous occuper du dictionnaire des données.
    Vous évoquez une matrice : il s’agit d’une matrice de quoi ?
    Quant au graphe des clés : ce dernier terme ne fait pas partie du vocabulaire Merise. Cela dit, avec les identifiants évoqués plus haut vous disposez des éléments nécessaires pour dresser un inventaire.

    Bon courage pour la suite.
    (a) Faites simple, mais pas plus simple ! (A. Einstein)
    (b) Certes, E=mc², mais si on discute un peu, on peut l’avoir pour beaucoup moins cher... (G. Lacroix, « Les Euphorismes de Grégoire »)
    => La relativité n'existerait donc que relativement aux relativistes (Jean Eisenstaedt, « Einstein et la relativité générale »)

    __________________________________
    Bases de données relationnelles et normalisation : de la première à la sixième forme normale
    Modéliser les données avec MySQL Workbench
    Je ne réponds pas aux questions techniques par MP. Les forums sont là pour ça.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Comment faire un MCD a partir .sql
    Par rafikindia dans le forum Débuter
    Réponses: 2
    Dernier message: 25/09/2008, 16h28
  2. Comment faire un MCD
    Par lucky42 dans le forum Tableaux - Graphiques - Images - Flottants
    Réponses: 5
    Dernier message: 14/06/2007, 13h02
  3. [MCD]Base de donnees multilingues Comment Faire ?
    Par Falco01 dans le forum Schéma
    Réponses: 9
    Dernier message: 14/02/2007, 17h14
  4. comment faire un agrégat dans un mcd?
    Par devbug dans le forum Schéma
    Réponses: 2
    Dernier message: 04/08/2006, 23h58
  5. XML et MCD : Comment Faire ?
    Par soltani.slim dans le forum XML/XSL et SOAP
    Réponses: 1
    Dernier message: 10/10/2005, 14h19

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo