Envoyé par
Black-Hawk
Il est clair que :
- un employé peut avoir plusieurs rôles dans plusieurs projets ou dans un meme projet
- un projet possède au minimum un employé avec un rôle
- un rôle concerne au moins un employé dans un projet
La 1re affirmation est conforme à votre représentation graphique.
La 2e affirmation l’est aussi.
La 3e ne l’est pas. En effet, d’après la représentation graphique il peut exister des rôles qui ne concernent pas les projets et les employés. Un rôle peut donc seulement concerner facultativement un ou plusieurs projets et un ou plusieurs employés.
Envoyé par
Black-Hawk
si je suppose que je pioche un employé et un projet , il y a deux possibilités .
Soit l'employé participe au projet et dans ce cas là il a forcément un rôle et donc le min = 1, soit il ne participe pas au projet et donc n'a pas de rôle dans ce projet et min =0.
=> min = 0 l’emporte sur min = 1.
Passons en effet à une représentation tabulaire des choses (modèle logique) :
Les employés e1, e2 et e3 participent au moins à un projet en y tenant un certain rôle (e1 quatre fois, e2 deux fois et e3 une fois). En revanche, l’employé e4 ne participe à aucun projet (mais rien ne dit que cela ne se fera pas un de ces jours, quand il aura acquis la compétence nécessaire). A cause de la règle de gestion qui précise que des gens, à l’instar de e4 peuvent ne participer à aucun projet, la cardinalité min est nécessairement égale à zéro entre Emp et Participer.
De la même façon, les rôles r1, r2 et r3 sont utilisés dans au moins un projet (r1 quatre fois, r2 deux fois et r3 une fois). En revanche, le rôle e4 n’est utilisé dans aucun projet (mais rien ne dit que cela ne se fera pas un de ces jours, par exemple quand un employé aura acquis la compétence de concepteur).
Dans la représentation graphique que j’ai fournie, Participer est à un interpréter comme un prédicat de la bonne vieille logique :
L’employé EmpId participe au projet ProjId en y tenant le rôle RoleId.
Les propositions correspondantes sont par définition tenues pour vraies :
(1) L’employé e1 participe au projet p1 en y tenant le rôle r1.
(2) L’employé e1 participe au projet p1 en y tenant le rôle r2.
(3) L’employé e3 participe au projet p1 en y tenant le rôle r3.
(4) L’employé e2 participe au projet p1 en y tenant le rôle r1.
(5) L’employé e1 participe au projet p2 en y tenant le rôle r1.
(6) L’employé e2 participe au projet p2 en y tenant le rôle r2.
(7) L’employé e1 participe au projet p3 en y tenant le rôle r1.
Maintenant, si vous estimez qu’une des propositions n’est pas valide, par exemple que l’employé e2 n’a pas la compétence r3, c’est que la modélisation est à revoir, car non conforme à une hypothétique règle de gestion interdisant de faire figurer la proposition mise en cause.
Envoyé par
Black-Hawk
Quelqu'un pourrait m'expliquer le projet ( 1 , n) ?
J’espère que ce qui précède est une réponse. Vous observerez en effet dans la représentation graphique tabulaire, que pour chaque projet, il y a au moins un employé et au moins un rôle.
Envoyé par
Black-Hawk
Invalide le système ? Que voulez-vous dire par là ?
Je disais donc :
Incidemment, certaines règles particulières à l'entreprise peuvent faire que la relation Mettre en œuvre soit décomposable. Mais il arrive aussi que cela soit impossible sans que l’on rende invalide le système.
Pour reprendre votre exemple, supposons qu’il existe une règle de gestion (un peu alambiquée, j’en conviens) selon laquelle :
Si un employé participe à un projet, lequel requiert un rôle pour lequel cet employé doit être compétent, alors cet employé participe nécessairement au projet en y jouant le rôle requis.
Conformément à cette règle, est-ce que toutes les propositions du prédicat Participer requises font partie de l'énumération ci-dessus ? Non, car :
L’employé e1 participe au projet p2 ; lequel requiert la compétence r2 qu’a effectivement cet employé, donc il faut ajouter à la liste la proposition suivante :
(8) L’employé e1 participe au projet p2 en y tenant le rôle r2.
De même, il manque les propositions :
(9) L’employé e2 participe au projet p1 en y tenant le rôle r2.
(10) L’employé e2 participe au projet p2 en y tenant le rôle r1.
La représentation tabulaire devient en conséquence la suivante et conforme à la règle alambiquée :
En fait, la table Participer devient redondante et pour garantir la règle alambiquée, la théorie de la normalisation recommande (sans l’imposer) de décomposer cette table en 3 tables (appelons-les Requerir, Participer et Maitriser) : c’est ce qu’on appelle normaliser en 5e forme normale (5NF), processus qui permet d’éviter certaines redondances nichées dans la table qu'il a fallu compléter, difficilement perceptibles et qu’il ne faut pas oublier d’injecter pour que la table soit valide.
Si l’on normalise en 5NF, par rétroconception on obtient le MCD normalisé suivant :
Quand j’ai dit :
Mais il arrive aussi que cela soit impossible sans que l’on rende invalide le système
Cela voulait dire que le MCD normalisé ne vaut que lorsque la règle de gestion alambiquée est effective, sinon, si cette règle n’existe pas, alors ce MCD n'a rien à faire ici et c’est le vôtre MCD qui est le bon.
Partager