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 et boucle fermée


Sujet :

Schéma

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

    Informations forums :
    Inscription : Avril 2010
    Messages : 20
    Points : 15
    Points
    15
    Par défaut MCD et boucle fermée
    Bonjour a tous,

    Je suis sur la conception d'un projet simple, ayant besoin de l'utilisation d'une base de données. J'ai alors fait un MCD, afin de modéliser ma base de données. Le problème est que j'ai une boucle fermée, dont je n'arrive pas a me débarrasser.

    Le projet est un simple logiciel de comptes. un utilisateur créé des comptes (bancaire) sur lesquels il effectue des opérations. L'utilisateur définit également des catégories avec des sous catégories. chaque opération doit être classée dans une sous catégorie.

    Je vous ai transmis mon MCD en pièce jointe. Le problème est qu'au niveau des "opérations", il y a une boucle est fermé. Il y a donc une redondance d'informations.

    A partir d'une "opération", il est possible de retrouver "l'utilisateur" :
    • Soit en remontant par le "compte"
    • Soit en remontant par les "catégories"


    Si quelqu'un avait une idée, afin d'éviter cette boucle, ou surtout éviter la redondance de l'information utilisateur ?

    Je vous remercie d'avance
    Images attachées Images attachées  

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    566
    Détails du profil
    Informations personnelles :
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2009
    Messages : 566
    Points : 1 045
    Points
    1 045
    Par défaut
    Bonjour,

    En attendant mieux, je peux te signaler que ta ternaire n'est pas correcte car, il n'est pas possible d'avoir une relation --1,1--. Les trois relations devraient être -- 0, n --

    Il serait peut être envisageable de supprimer la ternaire. Ainsi, nous aurions :

    Compte -- 0,n -- Contient -- 1,1 -- Operation
    et
    Categorie enfant -- 0,n -- Lier -- 1, 1 -- Operation

    Maintenant, tu auras certainement des avis plus pertinent, qui te présenterons d'autres modèles de modélisation.

    @+

  3. #3
    Expert confirmé Avatar de Richard_35
    Homme Profil pro
    Inscrit en
    Juillet 2007
    Messages
    3 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 3 121
    Points : 4 596
    Points
    4 596
    Par défaut
    Bonjour Gwadaboug et Seabs,

    Je me permets de m'immiscer, Seabs...

    Citation Envoyé par Seabs
    Compte -- 0,n -- Contient -- 1,1 -- Operation
    et
    Categorie enfant -- 0,n -- Lier -- 1, 1 -- Operation
    ==> tout à fait !

    J'ajoute que, à partir de ton MCD, Gwadaboug :
    Compte -- 0,n -- Contient -- 1,1 -- Operation
    tu obtiendras les tables suivantes :
    Compte(Id_Compte, Nom, ...) ;
    Operation(Id_Operation, #Id_Compte, ...).
    Dès lors, je ne vois pas très bien comment Categorie_Enfant pourrait être liée à l'association "Contient" qui ne possède aucun attribut...

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

    Informations forums :
    Inscription : Avril 2010
    Messages : 20
    Points : 15
    Points
    15
    Par défaut
    Bonsoir,

    Je vous remercie pour vos réponses. J'ai apporté une correction au schéma. Je pense a présent que celui ci est valide.

    Mais la boucle fermée est toujours la, ce qui apporte une redondance d'information. Et je ne vois vraiment pas comment m'en séparer, sauf avec un trigger.

    Mais je souhaite, si possible, apporter une solution dans ma conception, plutôt qu'utiliser ce genre de méthode.

    Je vous remercie encore de m'avoir apporté une correction a mon schéma afin de pouvoir être plus précis.
    Images attachées Images attachées  

  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 097
    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 097
    Points : 31 528
    Points
    31 528
    Billets dans le blog
    16
    Par défaut
    Bonsoir,


    Citation Envoyé par gwadaboug Voir le message
    A partir d'une "opération", il est possible de retrouver "l'utilisateur" :
    • Soit en remontant par le "compte"
    • Soit en remontant par les "catégories"
    Dans l’état du diagramme conceptuel, il est possible de tricoter les opérations / comptes d’un utilisateur avec les sous-catégories/catégories d’un autre utilisateur :



    Dans cette représentation on attire l’attention sur le fait qu’il faudra mettre place un mécanisme au niveau de la base de données permettant d’imposer le respect d’une contrainte d’égalité. Ceci passera par la mise en œuvre d’une assertion (instruction CREATE ASSERTION de la norme SQL) ou — si votre SGBD ne permet pas les assertions — se fera a priori au moyen d’un trigger pour s’assurer que l’utilisateur impliqué par une opération (via le compte référencé par l’opération) est bien celui qui est référencé via la sous-catégorie et la catégorie. Mais cette façon de faire ne semble vous convenir que très moyennement...

    Note concernant les identifiants : comme l’utilisateur peut créer des comptes, des catégories et des sous-catégories, on peut distinguer d’une part les identifiants « système » tels que CompteId, OperId, CatId, SousCatId (primary identifiers, mickey « <pi> ») non modifiables par l’utilisateur et d’autre part les identifiants dont celui-ci peut faire ce qu’il veut, tels que CompteNo, OperNo, CatNo, SousCatNo (alternate identifiers, mickey « <ai> »).

    Maintenant, une façon d’éviter la mise en œuvre d’une assertion ou d’un trigger peut consister à utiliser l’identification relative, symbolisée dans le cas par exemple de Power AMC par la mise entre parenthèses des cardinalités 1,1 (associations-types UTIL_COMPTE, COMPTE_OPER, UTIL_CAT, CAT_SOUSCAT) :



    Ce choix a du reste une justification sémantique dans la mesure où un compte ne peut pas changer d’utilisateur (c’est l’utilisateur qui crée ses propres comptes), de même parce qu’une opération ne peut pas être rattachée à un autre compte, etc.

    Dans ces conditions, le MLD qui est dérivé est le suivant (L’attribut UtilisateurId est propagé par les deux chemins jusqu’à OPERATION) :



    La contrainte d’égalité ne concerne plus que la table OPERATION et revient à ceci :
    UtilisateurId = CAT_UtilisateurId
    Le plus simple est de pouvoir se passer de l’attribut CAT_UtilisateurId, ce à quoi on parvient en modifiant la référence OPER_SOUSCAT. Si on utilise Power AMC :

    1) Afficher l’onglet « Jointures » de la référence :



    2) Jouer sur « Colonne de la table enfant », à savoir remplacer CAT_UtilisateurId par UtilisateurId :



    La colonne CAT_UtilisateurId devient sans emploi et l’AGL la supprime d’office. La table OPERATION ne comporte plus que la seule colonne UtilisateurId pour participer à la référence d’un compte et d’une sous-catégorie, la contrainte d’égalité est donc de facto respectée :



    Si l’on ne dispose pas d’AGL tel que Power AMC ou WinDesign (ce qui semble être votre cas), la modification est à effectuer manuellement.

  6. #6
    Membre éprouvé
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    566
    Détails du profil
    Informations personnelles :
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2009
    Messages : 566
    Points : 1 045
    Points
    1 045
    Par défaut
    Bonjour,

    @fsmrel
    Je vous présente tous mes vœux pour cette nouvelle année et merci pour vos précieux conseils.

    Une fois encore, vous touchez là où ça fait mal. Je n'avais pas vu le piège et pourtant je fais des efforts. Mais, le coup d’œil ne s'obtient qu'avec le temps.

    J'ai encore à apprendre, alors je continue.

    Avec vos remarques, @gwadaboug doit résoudre sa difficulté, car la présentation est limpide.

    A+

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 20
    Points : 15
    Points
    15
    Par défaut
    Bonjour,

    Je vous remercie pour cette réponse détaillée.
    Je pense finalement utiliser les triggers, car la deuxième solution me semble plus compliqué et risque d'alourdir la base de données. mais je pense en avoir compris l'essentiel.

    Je n'utilise aucun éditeur pour mes bases de données, je fais tout par des scripts mais cela me permet d’être proche de ma BD et de tout contrôler.

    Je considère ce post comme résolu, et espère que ça puisse aider d'autre personne qui se trouve dans ma situation.

    Merci encore a vous tous, bonne journée.

  8. #8
    Expert confirmé Avatar de Richard_35
    Homme Profil pro
    Inscrit en
    Juillet 2007
    Messages
    3 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 3 121
    Points : 4 596
    Points
    4 596
    Par défaut
    Bonjour Gwadaboug, Seabs et Fsmrel,

    Limpide, effectivement, Fsmrel .

    Une chose m'a, sans doute, échappé : dans le post initial, il ne me semble pas qu'il soit précisé que l'utilisateur qui créé le compte doit être, absolument, celui qui créé les opérations.

    L'utilisateur semble stocké uniquement en tant qu'information :
    • qui a créé le compte ?
    • qui a créé les opérations ?
    • etc...

    L'utilisateur créant des opérations n'étant pas, forcément, celui qui a créé le compte.

    Si tu pouvais préciser, Gwadaboug, juste pour le fun...

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 20
    Points : 15
    Points
    15
    Par défaut
    Bonsoir Richard_35,

    En faite la c'est l'utilisateur qui créé les comptes, les opérations liées aux comptes ainsi que les catégories et les sous catégories.

    bonne soirée a tous et merci encore pour toutes ces informations

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


    @seabs
    Je vous remercie pour vos vœux et vous présente à mon tour les miens, ainsi qu’à gwadaboug et Richard. Bon crapahut dans les modèles !

    Le piège que vous évoquez est un classique : dès que se présentent des chemins collatéraux finissant par se rejoindre, balek ! Des dégâts tout aussi « collatéraux » sont possibles...


    Citation Envoyé par gwadaboug Voir le message
    Je n'utilise aucun éditeur pour mes bases de données, je fais tout par des scripts mais cela me permet d’être proche de ma BD et de tout contrôler.
    Je vous conseille quand même de vous servir d’un outil avec lequel vous pourrez continuer à être au plus près de votre base de données, mais qui en plus vous signale des erreurs que vous auriez laissé passer par inadvertance et qui vous génère les scripts de création des tables. En l’occurrence MySQL Workbench (gratuit) pourrait parfaitement faire l’affaire (vous pouvez vous reporter à l’exemple que j’ai fourni ici).

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

Discussions similaires

  1. Boucle fermée en mcd
    Par jamyong dans le forum Merise
    Réponses: 13
    Dernier message: 04/07/2014, 02h44
  2. Héritage et boucle fermé
    Par Tunesischen dans le forum UML
    Réponses: 1
    Dernier message: 17/09/2012, 12h26
  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