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 :

[MCD]Inventaire d'une cave


Sujet :

Schéma

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 50
    Points : 20
    Points
    20
    Par défaut [MCD]Inventaire d'une cave
    Bonjour à tous,
    voila je dois realiser une application de geston d'nventaire d'une cave, je n'ai pas encore choisi le langage de développment mais je bloque un peu pour le mcd.
    En fait ce que je dois prendre en compte c'est : lenom de la boisson, date d'entrée et date de sortie et ce qui reste en stock.
    Pour le calcul de ce qui reste en stock je sais que ce n'est pas à prendre en compt dans le MCD vu que c'est une donnée calculée.
    Sur l'image jointe, c'est un tableau qui représente la manière dont c'était geré jusqu'a maintenant. Si vous poviez me donner votre avis sur le MCD svp merci.
    Images attachées Images attachées  

  2. #2
    Membre éclairé Avatar de grabriel
    Inscrit en
    Septembre 2006
    Messages
    946
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 946
    Points : 730
    Points
    730
    Par défaut
    Tu voulais pas plutot dire ca :
    je me suis mal exprimé. Si vous pouviez me donner le MCD qe vous feriez.
    Commence par faire ton dictionnaire des données, lister les règles de gestion, après tu feras une ébauche de MCD que tu publiras ici et tout le monde sera ravi de te donner des conseils!!

    Il existe un outil qui te facilitera la tâche et en plus il est gratuit et en francais.
    http://analysesi.free.fr/ Tu peux toujours faire une recherche sur le forum il me semble que quelqu'un a déjà été confronté à la même problèmatique, tu pourras surement t'inspirer de son travail.

    Bon courage.

  3. #3
    Expert éminent sénior
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    Septembre 2006
    Messages
    8 002
    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 002
    Points : 30 906
    Points
    30 906
    Billets dans le blog
    16
    Par défaut
    Bonsoir Yukhaa,


    Pour le calcul de ce qui reste en stock je sais que ce n'est pas à prendre en compt dans le MCD vu que c'est une donnée calculée
    Faisons effectivement abstraction de ce qui reste en stock, en postulant que pour chaque boisson on connaît les quantités entrées (à date) et les quantités sorties (à date).

    Dans ces conditions, modélisons les boissons : Les attributs d’une boisson-type sont son nom, l’ensemble des entrées et l’ensemble des sorties la concernant. Règle de base : vous devez définir un identifiant pour cette boisson-type : ça pourrait être l’attribut Nom, mais on postulera ici que la valeur d’un nom peut changer dans le temps alors que l’on doit s’astreindre à respecter la règle d’invariance des données identifiantes. Dans ce contexte, on invente un attribut identifiant ad-hoc. Baptisons IdBoisson cet identifiant.

    Votre tableau peut être schématisé ainsi (identifiant souligné) :

    Boisson (IdBoisson, NomBoisson, Entrees (Date, Quantite), Sorties (Date, Quantite))

    Ce nouveau tableau est appelé Boisson : on utilise le singulier, car on décrit une boisson-type. Ses attributs sont les suivants : IdBoisson, NomBoisson, Entrees, Sorties. Vous noterez que le nom des attributs Entrees et Sorties est au pluriel. En effet, pour une boisson-type, on peut avoir plusieurs entrées et plusieurs sorties. Bien que le Modèle Relationnel de Données s’accommode pour sa part de cette façon de modéliser (une table peut être une valeur pour un attribut de type table), si vous utilisez Merise (vous êtes sur forum qui lui est dédiée) il faut procéder autrement (jusqu’à plus ample informé, une entité merisienne ne peut pas être une valeur pour un attribut).

    Le principe consiste à "expulser" Entrees et Sorties de Boisson et d’en faire des entités-types à part entière, toujours identifiées par IdBoisson, comme leur maman. Mais comme l’identifiant a notamment pour rôle d’éviter qu’il n’y ait des doublons, on adjoint à IdBoisson des attributs servant à cela : IdEntree et IdSortie (Date pourrait convenir, mais intervient encore le principe de l’invariance des identifiants). On obtient alors le jeu de tables suivant (noter que les noms sont maintenant au singulier) :

    Boisson (IdBoisson, NomBoisson)

    Entree (IdBoisson, (IdEntree, Date, Quantite)

    Sortie (IdBoisson, (IdEntree, Date, Quantite)


    Au stade de la modélisation proprement dite, on obtient un Schéma conceptuel du genre (outil PowerAMC) :






    Et au stade logique (qui suit l’étape conceptuelle) l’outil produit le schéma :






    L’outil produit ensuite le jeu d’instructions permettant de créer les tables :
    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
    29
    30
    31
    32
    Create Table Boisson (
       IdBoisson            Int                  Not null,
       NomBoisson           Varchar(48)          Not null,
       Constraint PK_Boisson Primary Key  (IdBoisson) ,
       Constraint CK1 Unique (NomBoisson)
    )
    ;
    
    Create Table Entree (
       IdBoisson            Int                  Not null,
       IdEntree             Int                  Not null,
       Date                 Char(10)             Not null,
       Quantite             Int                  Not null,
       Constraint PK_Entree Primary Key  (IdBoisson, IdEntree),
       Constraint FK_Entree_Faire_entrer Foreign Key (IdBoisson)
          References Boisson (IdBoisson)
             On Delete Cascade
    )
    ;
    
    Create Table Sortie (
       IdBoisson            Int                  Not null,
       IdSortie             Int                  Not null,
       Date                 Char(10)             Not null,
       Quantite             Int                  Not null,
       Constraint PK_Sortie Primary Key  (IdBoisson, IdSortie),
       Constraint FK_Sortie_Faire_sortir Foreign Key (IdBoisson)
          References Boisson (IdBoisson)
             On Delete Cascade
    )
    ;
    Reste à créer un jeu d’essai :
    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
    Insert Into Boisson Values (1, 'Champagne') ;
    
    Insert Into Entree Values (1, 1, '01/01/1980', 40) ;
    Insert Into Entree Values (1, 2, '10/01/1981', 20) ;
    Insert Into Entree Values (1, 3, '15/10/1985', 50) ;
    
    Insert Into Sortie Values (1, 1, '01/03/1982', 10) ;
    Insert Into Sortie Values (1, 2, '10/01/1987', 30) ;
    Insert Into Sortie Values (1, 3, '01/10/1988', 20) ;
    
    Insert Into Boisson Values (2, 'Muscadet') ;
    
    Insert Into Entree Values (2, 1, '01/11/1981', 30) ;
    Insert Into Entree Values (2, 2, '10/11/1982', 70) ;
    
    Insert Into Sortie Values (2, 1, '25/12/1981', 10) ;
    Insert Into Sortie Values (2, 2, '10/05/1982', 15) ;
    Insert Into Sortie Values (2, 3, '01/10/1986', 30) ;
    Et créer quelques requêtes :

    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
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    Select IdBoisson, NomBoisson From Boisson ;
    =>
    IdBBoisson   NomBoisson
    1            Champagne
    2            Muscadet
    
    Select IdBoisson, IdEntree, Date, Quantite From Entree ;
    =>
    IdBoisson  IdEntree  Date        Quantite
    1              1      01/01/1980     40
    1              2      10/01/1981     20
    1              3      15/10/1985     50
    2              1      01/11/1981     30
    2              2      10/11/1982     70
    
    
    Select IdBoisson, IdSortie, Date, Quantite From Sortie ;
    =>
    IdBoisson  IdSortie  Date        Quantite
    
    1              1      01/03/1982     10
    1              2      10/01/1987     30
    1              3      01/10/1988     20
    2              1      25/12/1981     10
    2              2      10/05/1982     15
    2              3      01/10/1986     30
    
    Select NomBoisson as Boisson, Date as Entree, Quantite
    From   Boisson As B Join Entree As E On B.IdBoisson = E.IdBoisson ;
    =>
    Boisson     Entree       Quantite
    Champagne   01/01/1980      40
    Champagne   10/01/1981      20
    Champagne   15/10/1985      50
    Muscadet    01/11/1981      30
    Muscadet    10/11/1982      70
    
    Etc.

    Je ne sais pas si vous avez tout suivi. Il vous reste en tout cas à découvrir la FAQ Merise et quelques documents intéressants :

    Par exemple, de Michel Diviné
    http://michel.divine.free.fr/Livre.htm
    http://michel.divine.free.fr/Parlez.zip

    Ou de Cyril Gruau
    ftp://ftp-developpez.com/cyril-gruau/ConceptionBD.pdf

    Comme outil de modélisation rapide, vous pouvez utiliser Toad Data Modeler (gratuit). Vous modélisez directement au niveau logique, mais c’est déjà intéressant.

    Bon courage
    (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.

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 50
    Points : 20
    Points
    20
    Par défaut
    Merci beaucoup de toutes ces aides. J'ai quand meme une question, le fait d'expulser Entrées et Sorties cela ne s'appelle t il pas une specialisation ?

  5. #5
    Expert éminent sénior
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    Septembre 2006
    Messages
    8 002
    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 002
    Points : 30 906
    Points
    30 906
    Billets dans le blog
    16
    Par défaut
    Bonjour Yukhaa,


    Dans la mesure où l’on distingue les entrées des sorties, il y a forcément spécialisation au sens français du terme. Mais, dans le contexte de la modélisation des données, le terme "spécialisation" représente quelque chose de différent. La relation entre une boisson et ses entrées est une relation de un à plusieurs et une entrée est la chose d’une boisson de votre cave et d’une seule : il s’agit d’une relation de composition plutôt que de spécialisation. Un autre exemple de la relation de composition est celui de l’entreprise : une entreprise (repérée par l’INSEE par un numéro Siren) est constituée d’établissements (repérés par l’INSEE par un numéro Siret). Notamment un établissement n’est pas partagé par des entreprises et un établissement n’est pas une entreprise.

    Les entreprises et les établissements ont pourtant des points communs, ce sont par exemple des personnes morales, elles ont des adresses, des interlocuteurs, etc.

    Qui dit Personne morale dit Personne. Qui dit Personne, dit Personne morale ou physique... Or les individus— ou personnes physiques— que nous sommes (repérées par un NIR, alias numéro de sécurité sociale) partageons certaines propriétés avec les personnes morales, par exemple avoir des adresses...

    On peut réfléchir, selon une approche ascendante à la mise en œuvre d’une entité-type Personne : le processus engagé est celui de généralisation (si l’on raisonne selon une approche descendante on parle alors de spécialisation) :

    Un individu est une personne. Une entreprise est une personne. Un établissement est une personne. Cela n’empêche pas d’établir des relations entre une entreprise et des établissements et de la même façon d’établir des relations entre un établissement et les individus qui en constituent l’effectif. Je ne voudrais pas aller trop loin, mais si des établissements participent à la composition d’une entreprise (la disparition d’une entreprise entraîne celle de ses établissements), la disparition d’un établissement n’entraîne pas celle des individus qu’il emploie, il y a plutôt en l’occurrence une relation de type agrégation. Un individu (au moins en France) n’est pas lié à un établissement « à la vie à la mort ». Certes il y a là des subtilités, mais on rentre dans le monde de la modélisation.


    Exemple de spécialisation



    L’entité-type Personne est spécialisée en Entreprise, Etablissement, Individu.
    Quoi qu’il en soit, pour faire plus court, dans le contexte de la généralisation/spécialisation, un chat est un animal, un chien est aussi un animal. De la même façon, Boisson alcoolisée et Boisson non alcoolisée sont des spécialisations de Boisson. A contrario, une entrée n’est pas une boisson, pas plus qu’une sortie : entrées et sorties sont des propriétés (multivaluées) d’une boisson. Mais on pourrait généraliser Entrée et Sortie pour induire un être plus général, baptisé Mouvement, Flux ou ce que vous voulez...

    Bref, méfions nous de la confusion entre être et avoir.
    (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. Vérification d'un MCD concernant la gestion d'une cave à vin
    Par Nickook dans le forum Modélisation
    Réponses: 3
    Dernier message: 22/05/2015, 17h31
  2. Réponses: 1
    Dernier message: 11/03/2007, 19h56
  3. [MCD]Representation d'une adresse
    Par tyrosmf@hotmail.com dans le forum Schéma
    Réponses: 3
    Dernier message: 04/12/2006, 17h10
  4. Réponses: 10
    Dernier message: 12/07/2006, 13h00
  5. [MCD]Faut-il une Entité Date ?
    Par Francis dans le forum Schéma
    Réponses: 2
    Dernier message: 17/01/2005, 18h48

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