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

Merise Discussion :

Boucle fermée en mcd


Sujet :

Merise

  1. #1
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Juillet 2013
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juillet 2013
    Messages : 15
    Points : 17
    Points
    17
    Par défaut Boucle fermée en mcd
    bonjour tout le monde,bon je cherche a modéliser une relation qui lie une entité nommée projet qui peut contenir un ou plusieurs communes et de même une commune peut être concerné par un ou plusieurs projets ,le projet peut aussi contenir un ou plusieurs quartiers et de même un quartier peut être concerné par un ou plusieurs projets ,et une commune peut avoir un ou plusieurs quartier et un quartier appartient à une seule commune ,mon problème est que j'arrive pas à modéliser la relation entre ces trois entités sans aboutir à une boucle fermé,alors si vous pouvez bien m'aider .

  2. #2
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 801
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 801
    Points : 34 063
    Points
    34 063
    Billets dans le blog
    14
    Par défaut
    Bonjour, c'est effectivement un peu délicat à modéliser.

    Reprenons pas à pas...

    1)
    projet qui peut contenir un ou plusieurs communes et de même une commune peut être concerné par un ou plusieurs projets
    MCD :
    projet -0,n----contenir----0,n- commune

    2)
    le projet peut aussi contenir un ou plusieurs quartiers et de même un quartier peut être concerné par un ou plusieurs projets
    MCD :
    projet -0,n----contenir----0,n- quartier

    3)
    une commune peut avoir un ou plusieurs quartier et un quartier appartient à une seule commune
    MCD :
    commune -0,n----contenir----1,1- quartier

    4) Réunissons les associations 2 et 3
    projet -0,n----contenir----0,n- quartier -1,1----contenir----0,n- commune

    On voit ici que lorsqu'un projet est associé à un quartier, on en déduit la commune. L'association en projet et commune devient dans ce cas inutile.
    Mais comme, si j'ai bien compris, il peut y avoir un projet associé à une commune sans référence précise à un quartier, il faut quand même conserver l'association pour ces types de projets.

    projet -0,n----contenir----0,n- quartier -1,1----contenir----0,n- commune
    |---------0,n--------------------------contenir-------------------------0,n----------|

    Si un projet ne peut pas concerner (plutôt que contenir) à la fois un ou des quartiers d'une commune C1 et une ou plusieurs autres communes Cn, alors on peut matérialiser une exclusion entre les associations entre projet et quartier et entre projet et commune, difficilement représentable en mode texte dans ce message mais réalisable avec un bon logiciel de modélisation.

    Si par contre il est possible qu'un projet concerne à la fois un ou plusieurs quartiers d'une commune C1 et une ou plusieurs autres communes Cn, alors il faudra modéliser une contrainte d'intégrité fonctionnelle empêchant d'enregistrer à la fois l'association entre le projet et la commune C1 et entre le projet et les quartiers de C1, sans interdire l'existence simultanée des deux associations entre projet et quartier et entre projet et commune.

    Si on ne fait pas ça, on laisse la possibiliter d'enregistrer des doublons ou, pire, un projet qui ne concernerait que les quartiers d'une seule commune et qui parallèelement serait enregistré en association avec une autre commune.

    Pas le temps de faire les schéma détaillés pour illustrer davantage mon propos.

    Revenez nos voir avec votre MCD.

  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 112
    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 112
    Points : 31 585
    Points
    31 585
    Billets dans le blog
    16
    Par défaut
    Bonjour,


    A ce qu’a écrit CinePhil, j’ajoute ceci :

    Un quartier d’une commune n’a pas d’existence propre, il n’existe que si la commune dont il est un élément existe. Si on définit une entité-type QUARTIER, alors elle est du genre entité-type faible (weak entity type), en association avec l’entité-type COMMUNE, laquelle est une entité-type autonome, forte. Dans le cas de Merise, on traduit cela par l’utilisation de l’identification relative.


    Au niveau MLD, on doit obtenir un diagramme du genre de celui-ci (réalisé avec MySQL Workbench, gratuit) :




    Diagramme dans lequel, si un projet est associé à un quartier, c’est par le biais de la commune dont ce quartier est un élément. La clé de QUARTIER n’est pas le singleton {QuartierId}, mais la paire {CommuneId, QuartierId}.

    Un projet peut être associé à une commune sans que les quartiers de la commune soient parties prenantes dans cette affaire : ceci fait l’objet de la contrainte d’exclusion évoquée par CinePhil, symbolisée dans le diagramme par le cercle en rouge, porteur de la lette « X ». Comme MySQL Workbench ne permet pas de modéliser cela, je l’ai ajouté à l’aide de PAINT . Au niveau SQL, cela se traduira par un trigger.


    Pour remonter au niveau du MCD, PROJET_COMMUNE est une entité-type associative entre PROJET et COMMUNE, c'est-à-dire une association transformée en entité-type, afin qu’on puisse établir une association (à savoir PROJET_QUARTIER) avec l’entité-type (faible) QUARTIER.

  4. #4
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Juillet 2013
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juillet 2013
    Messages : 15
    Points : 17
    Points
    17
    Par défaut
    voila le mcd que je conçois

    Nom : 2014-07-02_133415.png
Affichages : 1544
Taille : 17,6 Ko

  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 112
    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 112
    Points : 31 585
    Points
    31 585
    Billets dans le blog
    16
    Par défaut
    Jamyong,


    Une CIF (contrainte d’intégrité fonctionnelle) est une contrainte entre associations, mais pas directement entre entités-types. Quoi qu’il en soit, on peut interpréter votre contrainte ainsi : un quartier fait référence à une commune et une seule. Par exemple, le quartier Volfoni est un quartier de la commune Yadupour et seulement de celle-ci.


    De son côté, l’association CONCERNE est une ternaire (indépendante de votre CIF), selon laquelle, par définition, en vertu des cardinalités maximales N :

    — Un quartier peut participer plusieurs fois à l’association ;

    — Un projet peut participer plusieurs fois à l’association ;

    — Une commune peut participer plusieurs fois à l’association.


    Ainsi, un quartier peut être associé à plusieurs projets et plusieurs communes...

    Par exemple, selon votre MCD, le quartier Volfoni (de la commune Yadupour) peut concerner les projest P1, P2, P3, et en outre concerner les communes Morzy-les-Joyeuses et LoufVille, sans pour autant que Yadupour fasse partie des communes concernées...

  6. #6
    Expert éminent sénior
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    Septembre 2006
    Messages
    8 112
    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 112
    Points : 31 585
    Points
    31 585
    Billets dans le blog
    16
    Par défaut
    Jamyong,


    Puisque vous utilisez PowerAMC, voici un MCD correspondant la rétro-conception du diagramme MySQL Workbench (la contrainte d’exclusion a une fois de plus été ajoutée à l’aide de PAINT, puisque PowerAMC ne propose rien pour la prendre formellement en compte).

    Les parenthèses encadrant les cardinalités 1,1 symbolisent l’identification relative selon PowerAMC.


  7. #7
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Juillet 2013
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juillet 2013
    Messages : 15
    Points : 17
    Points
    17
    Par défaut
    merci les gars vous m'avez énormément aidé .

  8. #8
    Membre émérite
    Homme Profil pro
    tripatouilleur de code pour améliorer mon quotidien boulistique
    Inscrit en
    Février 2008
    Messages
    939
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : tripatouilleur de code pour améliorer mon quotidien boulistique
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2008
    Messages : 939
    Points : 2 287
    Points
    2 287
    Par défaut
    Bonjour

    NE maîtrisant pas énormément la modélisation en dure (j'en suis à une stade disons plutôt intuitif), ma question est sans doute mal venue, mais la voici :

    Dans le cas où un projet porte sur la commune, sans quartier particulier, ne pourrait-on pas envisager pour chaque commune un quartier nommé "Commune entière"?

    Bêtement je me dis que ce qu'a écrit CinePhil :


    Mais comme, si j'ai bien compris, il peut y avoir un projet associé à une commune sans référence précise à un quartier, il faut quand même conserver l'association pour ces types de projets.
    deviendrait sans objet : tout projet est associé à un quartier, l'un d'eux étant la commune entière.


    Je dois me tromper lourdement, pusique cette possibilité n'a pas été envisagée par des spécialistes comme CinePhil et fsmrel. Mais je veux bien qu'on m'explique où se situe mon erreur.

    Bonne nuit !!

    Pierre

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



    Citation Envoyé par pier.antoine Voir le message
    Dans le cas où un projet porte sur la commune, sans quartier particulier, ne pourrait-on pas envisager pour chaque commune un quartier nommé "Commune entière"?
    Je ne sais pas quelle sera la réaction de CinePhil, mais pour ma part je dirai(s) que ça sent la bidouille...

    En effet, on procède à un glissement sémantique, puisque l’association avec COMMUNE disparaissant, le diagramme devient celui-ci , à interpréter comme quoi un projet ne concerne que les quartiers :




    Ensuite, le concepteur devra expliquer aux différentes parties prenantes (MOE, chefs de projet, développeurs et compagnie) que dans certains cas, un quartier n’est pas un quartier mais une commune, et qu’en l’occurrence il faudra valoriser l’attribut QuartierNom à « commune entière » (ou utiliser un artifice du même tonneau). Techniquement ça peut marcher, mais prudence, ça me rappelle la façon dont on modélisait avant que Merise et autres approches E/R (Chen) ne naissent, quand on faisait joyeusement de la salade de concepts...


    De toute façon, il y a d’autres solutions. Par exemple, les fondus de la spécialisation/généralisation (l’« héritage ») préconiseront un MCD du genre :



    Où l’on voit qu’un projet concerne à nouveau des lieux qui peuvent être des communes ou des quartiers.



    Bref, tant qu’il y aura de l’imagination...

  10. #10
    Membre émérite
    Homme Profil pro
    tripatouilleur de code pour améliorer mon quotidien boulistique
    Inscrit en
    Février 2008
    Messages
    939
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : tripatouilleur de code pour améliorer mon quotidien boulistique
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2008
    Messages : 939
    Points : 2 287
    Points
    2 287
    Par défaut
    Merci fsmrel pour ces remarques.

    Par contre, avec ma proposition, le fait qu'il y ait dans dans "Projet quartier" la référence et à la commune et au quartier me semble étrange, un quartier étant toujours dans une commune. Y a-t-il toujours la notion d'identification relative?

    Bonne journée?

    Pierre, le bouliste (??)

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


    Citation Envoyé par pier.antoine Voir le message
    Avec ma proposition, le fait qu'il y ait dans "Projet quartier" la référence et à la commune et au quartier me semble étrange, un quartier étant toujours dans une commune. Y a-t-il toujours la notion d'identification relative?
    Reprenons le diagramme concerné :



    Conceptuellement parlant, QUARTIER est identifié relativement à COMMUNE puisqu’un quartier n’a pas d’existence propre, il n’en est qu’une propriété (multivaluée, certes, mais propriété quand même). Conceptuellement parlant, PROJET_QUARTIER est pour sa part une association N-M entre PROJET et QUARTIER. Lors du passage au niveau tabulaire, cette association fait l’objet d’une table, dont la clé est l’union (au sens de la théorie des ensembles) des clés de PROJET, {Projetid} et de QUARTIER, {CommuneId, Quartierid} : la clé de PROJET_QUARTIER est donc bien le triplet {Projetid, CommuneId, Quartierid}.

    Quelle alternative proposez-vous ?


    P.-S. L’adjectif « boulistique » a bien trait à l’activité du bouliste, non ?

  12. #12
    Membre émérite
    Homme Profil pro
    tripatouilleur de code pour améliorer mon quotidien boulistique
    Inscrit en
    Février 2008
    Messages
    939
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : tripatouilleur de code pour améliorer mon quotidien boulistique
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2008
    Messages : 939
    Points : 2 287
    Points
    2 287
    Par défaut
    Bonjour

    Loin de moi de vouloir proposer quelque chose. J'en suis au stade de la compréhension.

    cette association fait l’objet d’une table, dont la clé est l’union (au sens de la théorie des ensembles) des clés de PROJET, {Projetid} et de QUARTIER
    Ca je comprends, c'est ce que j'aurais fait.

    Mais pourquoi?
    QUARTIER, {CommuneId, Quartierid}
    Certes, chaque table quartier contient la clé référence à la table commune. Mais pourquoi l'union des clés de PROJET, {Projetid} et de QUARTIER {Quartierid} ne suffit-il pas? Pourquoi devoir absolument intégrer la référence de la commune?

    Bonne soirée.
    Pierre

  13. #13
    Expert éminent sénior
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    Septembre 2006
    Messages
    8 112
    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 112
    Points : 31 585
    Points
    31 585
    Billets dans le blog
    16
    Par défaut Identification relative, one more time...
    Bonsoir Pierre,


    Citation Envoyé par Pierre
    Mais pourquoi? QUARTIER, {CommuneId, Quartierid}
    C’est la conséquence de l’identification relative. La clé de la table QUARTIER n’est pas le singleton {Quartierid} (cas de l’identification absolue), mais la paire {CommuneId, Quartierid} (cas de l’identification relative) : pour chaque commune, la numérotation de l’attribut Quartierid commence à 1 :

    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
    Table QUARTIER
    
    CommuneId    Quartierid 
    ---------    ----------
            1             1
            1             2
            1             3
       
            2             1
            2             2
            2             3
       
            n             1
            n             2
            n             3
    Ted Codd, père du modèle relationnel de données procède de la même façon, voyez son article fondateur de 1970, A Relational Model of Data for Large Shared Data Banks, à la page 381, les figures (3a) et (3b), clés primaires en italiques. En adaptant son exemple aux communes et quartiers, on part de la variable relationnelle COMMUNE non normalisée (au sens de Codd, donc) :

    COMMUNE {CommuneId, CommuneNom, QUARTIER {QuartierId, QuartierNom}}

    Après normalisation, on a décomposé COMMUNE en COMMUNE et QUARTIER :

    COMMUNE {CommuneId, CommuneNom}
    QUARTIER {CommuneId, QuartierId, QuartierNom}

    Voici ce qu’il écrit à ce propos :

    “Normalization proceeds as follows. Starting with the relation at the top of the tree, take its primary key and expand each of the immediately subordinate relations by inserting this primary key domain or domain combination. The primary key of each expanded relation consists of the primary key before expansion augmented by the primary key copied down from the parent relation. Now, strike out from the parent relation all nonsimple domains, remove the top node of the tree, and repeat the same sequence of operations on each remaining subtree.”

    Je traduis (en adaptant au besoin les termes utilisés en 1970) :

    « La normalisation fonctionne ainsi. En commençant avec la variable relationnelle (relation) au sommet de l’arbre, en prendre la clé primaire et étendre chacune des variables relationnelles qui lui sont directement rattachées en y insérant cette clé primaire (singleton ou multi-attributs). La clé primaire de chaque variable étendue est composée de la clé primaire avant extension, augmentée de la clé primaire recopiée de la variable parente. Ceci fait, virer de la variable parente les attributs qui n’ont plus rien à y faire, virer le nœud au sommet et répéter la séquence des opérations pour chaque sous-arbre restant. »



    Citation Envoyé par Pierre
    Pourquoi devoir absolument intégrer la référence de la commune?
    Ça n’est évidemment pas un absolu, mais la sémantique marche bien en général avec la performance, la consommation des ressources et tout ce genre de choses du niveau physique.

    Par exemple, si on n’utilise pas l’identification relative, la table QUARTIER devra être non seulement dotée d’un index pour la clé primaire {QuartierId}, mais aussi d’un autre index pour la clé étrangère {CommuneId}, sinon bonjour les performances de la jointure des tables COMMUNE et QUARTIER. Si on utilise l’identification relative, un seul index suffit (et n’oubliez pas que le coût des mises à jour d’une table croît singulièrement avec le nombre d’index accrochés à cette table).


    Si on n’utilise pas l’identification relative, pour retrouver le nom des communes concernées par le projet Rantanplan, la requête est la suivante (voyez aussi le 4e exemple ici) :

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT DISTINCT CommuneNom, '' AS '<= Projets - communes' 
    FROM   PROJET AS x JOIN PROJET_QUARTIER AS y ON x.ProjetId = y.ProjetId 
                       JOIN QUARTIER AS z ON y.QuartierId = z.QuartierId 
                       JOIN COMMUNE AS t ON z.CommuneId = t.CommuneId
    WHERE  ProjetNom = 'Rantanplan' ;

    Alors qu’on diminue le nombre de jointures avec l’identification relative :

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT DISTINCT CommuneNom, '' AS '<= Projets - communes' 
    FROM   PROJET AS x JOIN PROJET_QUARTIER AS y ON x.ProjetId = y.ProjetId 
                       JOIN COMMUNE AS z ON y.CommuneId = z.CommuneId
    WHERE  ProjetNom = 'Rantanplan' ;

    Mais surtout, au-delà de la consommation des ressources, les rafales d’entrées/sorties sur disque sont dans ce 2e cas incomparablement plus performantes (effet cluster que l’on sait maîtriser, contrairement avec l’autre solution).

    Etc.

  14. #14
    Membre émérite
    Homme Profil pro
    tripatouilleur de code pour améliorer mon quotidien boulistique
    Inscrit en
    Février 2008
    Messages
    939
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : tripatouilleur de code pour améliorer mon quotidien boulistique
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2008
    Messages : 939
    Points : 2 287
    Points
    2 287
    Par défaut
    Bonsoir
    OK, ça s'éclaire un peu, et en même temps cela s'assombrit : je me demande si depuis des années (où j'ai travaillé plutôt à l'intuition), jene me fourvoie pas.
    On va en rester là, mais je reviendrais avec mes projets concrets.

    Bonne nuit à tous.

    Pierre

Discussions similaires

  1. [MCD] une boucle dans mon MCD de gestion des gardes ! (c'est anormal ?)
    Par mechakiss dans le forum Schéma
    Réponses: 24
    Dernier message: 10/02/2012, 16h41
  2. MCD et boucle fermée
    Par gwadaboug dans le forum Schéma
    Réponses: 9
    Dernier message: 09/01/2012, 03h08
  3. [MCD] Boucle fermée dans le MCD.
    Par skatah dans le forum Schéma
    Réponses: 10
    Dernier message: 25/08/2010, 09h20
  4. Boucle fermée sous Matlab
    Par d0n32 dans le forum MATLAB
    Réponses: 1
    Dernier message: 08/07/2010, 14h47
  5. Boucle fermée - 1er ordre - PID
    Par canary dans le forum Simulink
    Réponses: 0
    Dernier message: 02/05/2010, 16h34

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