Précédent   Forum des professionnels en informatique > Général Développement > Conception > Modélisation > Schéma
Schéma Modélisation Relationnelle (Dépendances Fonctionnelles, Formes Normales, Entité-relation, MCD, MPD ...)
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 07/01/2012, 14h20   #1
Invité de passage
 
Sébastien Mnc
Inscription : avril 2010
Messages : 9
Détails du profil
Informations personnelles :
Nom : Sébastien Mnc

Informations forums :
Inscription : avril 2010
Messages : 9
Points : 2
Points : 2
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
Type de fichier : png mcd.png (16,0 Ko, 18 affichages)
gwadaboug est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/01/2012, 15h22   #2
Membre éprouvé
 
Inscription : janvier 2009
Messages : 301
Détails du profil
Informations personnelles :
Localisation : France, Marne (Champagne Ardenne)

Informations professionnelles :
Secteur : Finance

Informations forums :
Inscription : janvier 2009
Messages : 301
Points : 454
Points : 454
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.

@+
seabs est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 07/01/2012, 17h25   #3
Expert Confirmé
 
Avatar de Richard_35
 
Homme
Inscription : juillet 2007
Messages : 2 184
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Ille et Vilaine (Bretagne)

Informations forums :
Inscription : juillet 2007
Messages : 2 184
Points : 2 814
Points : 2 814
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...
__________________
Dis-nous et à bientôt,
Richard.
----------------------------------------------------------------------------------------------
En cas de résolution, et afin de faciliter la tâche des bénévoles, merci de cliquer sur .
et permettent aux forumeurs de cibler leur recherche dans une discussion : n'hésitez pas à voter !
Richard_35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/01/2012, 01h12   #4
Invité de passage
 
Sébastien Mnc
Inscription : avril 2010
Messages : 9
Détails du profil
Informations personnelles :
Nom : Sébastien Mnc

Informations forums :
Inscription : avril 2010
Messages : 9
Points : 2
Points : 2
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
Type de fichier : png mcd.png (17,9 Ko, 8 affichages)
gwadaboug est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/01/2012, 02h52   #5
Expert Confirmé Sénior

 
Avatar de fsmrel
 
Spécialiste en bases de données
Inscription : septembre 2006
Messages : 2 884
Détails du profil
Informations professionnelles :
Activité : Spécialiste en bases de données
Secteur : Conseil

Informations forums :
Inscription : septembre 2006
Messages : 2 884
Points : 5 126
Points : 5 126
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.
__________________
_
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 !)
fsmrel est déconnecté   Envoyer un message privé Réponse avec citation 40
Vieux 08/01/2012, 08h40   #6
Membre éprouvé
 
Inscription : janvier 2009
Messages : 301
Détails du profil
Informations personnelles :
Localisation : France, Marne (Champagne Ardenne)

Informations professionnelles :
Secteur : Finance

Informations forums :
Inscription : janvier 2009
Messages : 301
Points : 454
Points : 454
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+
seabs est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/01/2012, 11h32   #7
Invité de passage
 
Sébastien Mnc
Inscription : avril 2010
Messages : 9
Détails du profil
Informations personnelles :
Nom : Sébastien Mnc

Informations forums :
Inscription : avril 2010
Messages : 9
Points : 2
Points : 2
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.
gwadaboug est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/01/2012, 12h37   #8
Expert Confirmé
 
Avatar de Richard_35
 
Homme
Inscription : juillet 2007
Messages : 2 184
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Ille et Vilaine (Bretagne)

Informations forums :
Inscription : juillet 2007
Messages : 2 184
Points : 2 814
Points : 2 814
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...
__________________
Dis-nous et à bientôt,
Richard.
----------------------------------------------------------------------------------------------
En cas de résolution, et afin de faciliter la tâche des bénévoles, merci de cliquer sur .
et permettent aux forumeurs de cibler leur recherche dans une discussion : n'hésitez pas à voter !
Richard_35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/01/2012, 21h18   #9
Invité de passage
 
Sébastien Mnc
Inscription : avril 2010
Messages : 9
Détails du profil
Informations personnelles :
Nom : Sébastien Mnc

Informations forums :
Inscription : avril 2010
Messages : 9
Points : 2
Points : 2
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
gwadaboug est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/01/2012, 03h08   #10
Expert Confirmé Sénior

 
Avatar de fsmrel
 
Spécialiste en bases de données
Inscription : septembre 2006
Messages : 2 884
Détails du profil
Informations professionnelles :
Activité : Spécialiste en bases de données
Secteur : Conseil

Informations forums :
Inscription : septembre 2006
Messages : 2 884
Points : 5 126
Points : 5 126
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).
__________________
_
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 !)
fsmrel est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 04h37.


 
 
 
 
Partenaires

Hébergement Web