|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Invité de passage
![]() Sébastien Mnc Inscription : avril 2010 Messages : 9 ![]() |
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" :
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 |
|
|
00
|
|
|
#2 |
|
Membre éprouvé
![]() Inscription : janvier 2009 Messages : 301 ![]() |
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. @+ |
|
|
10
|
|
|
#3 | |
|
Expert Confirmé
![]() Inscription : juillet 2007 Messages : 2 184 ![]() |
Bonjour Gwadaboug et Seabs,
Je me permets de m'immiscer, Seabs... Citation:
J'ajoute que, à partir de ton MCD, Gwadaboug : Compte -- 0,n -- Contient -- 1,1 -- Operationtu obtiendras les tables suivantes : Compte(Id_Compte, Nom, ...) ;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...
__________________
Dis-nous et à bientôt, Richard. ---------------------------------------------------------------------------------------------- . et permettent aux forumeurs de cibler leur recherche dans une discussion : n'hésitez pas à voter !
|
|
|
|
00
|
|
|
#4 |
|
Invité de passage
![]() Sébastien Mnc Inscription : avril 2010 Messages : 9 ![]() |
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. |
|
|
00
|
|
|
#5 | |
|
Expert Confirmé Sénior
![]() ![]() ![]() Spécialiste en bases de données Inscription : septembre 2006 Messages : 2 884 ![]() |
Bonsoir,
Citation:
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_UtilisateurIdLe 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.
__________________
_ Faites simple, mais pas plus simple ! (A. Einstein) 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 (Bonne lecture !) |
|
|
|
40
|
|
|
#6 |
|
Membre éprouvé
![]() Inscription : janvier 2009 Messages : 301 ![]() |
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+ |
|
|
00
|
|
|
#7 |
|
Invité de passage
![]() Sébastien Mnc Inscription : avril 2010 Messages : 9 ![]() |
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. |
|
|
00
|
|
|
#8 |
|
Expert Confirmé
![]() Inscription : juillet 2007 Messages : 2 184 ![]() |
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 :
Si tu pouvais préciser, Gwadaboug, juste pour le fun...
__________________
Dis-nous et à bientôt, Richard. ---------------------------------------------------------------------------------------------- . et permettent aux forumeurs de cibler leur recherche dans une discussion : n'hésitez pas à voter !
|
|
|
00
|
|
|
#9 |
|
Invité de passage
![]() Sébastien Mnc Inscription : avril 2010 Messages : 9 ![]() |
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
|
|
|
00
|
|
|
#10 | |
|
Expert Confirmé Sénior
![]() ![]() ![]() Spécialiste en bases de données Inscription : septembre 2006 Messages : 2 884 ![]() |
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:
__________________
_ Faites simple, mais pas plus simple ! (A. Einstein) 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 (Bonne lecture !) |
|
|
|
00
|
Copyright © 2000-2012 - www.developpez.com