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 :

Association reflexive [MCD]


Sujet :

Schéma

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mai 2008
    Messages : 54
    Points : 39
    Points
    39
    Par défaut Association reflexive
    Bonjour,

    Je n'arrive pas à comprendre l'association reflexive
    Voici un exemple de MCD que j'ai trouvé:

    d'apres l'explication du document: " chaque employé a 0 ou 1 supérieur hiérarchique direct. Simultanément, chaque employé est le supérieur hiérarchique direct de 0 ou plusieurs employés. EMPLOYE (id_Employe, Nom_Employe, #id_Sup_Hierarchique)
    #id_Sup_Hierarchique est l'identifiant (id_Employe) du supérieur hiérarchique direct de l'employé considéré.


    Pouvez m'aider à le comprendre, SVP.
    Merci.

  2. #2
    Modérateur
    Avatar de bruno_pages
    Homme Profil pro
    ingénieur informaticien à la retraite
    Inscrit en
    Juin 2005
    Messages
    3 533
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : ingénieur informaticien à la retraite
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juin 2005
    Messages : 3 533
    Points : 6 709
    Points
    6 709
    Par défaut
    l'énoncé contient deux associations (mono directionnelles) :
    1. chaque employé a 0 ou 1 supérieur hiérarchique direct
    2. chaque employé est le supérieur hiérarchique direct de 0 ou plusieurs employés

    ces associations sont réflexives car elles vont d'une classe à elle même

    et ces deux associations (mono directionnelles) sont regroupées en une association bidirectionnelle
    Bruno Pagès, auteur de Bouml (freeware), mes tutoriels sur DVP (vieux, non à jour )

    N'oubliez pas de consulter les FAQ UML et les cours et tutoriels UML

  3. #3
    Membre expert
    Avatar de hed62
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juillet 2007
    Messages
    2 029
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 029
    Points : 3 134
    Points
    3 134
    Par défaut
    Attention, un MCD n'est pas de l'UML.

    La reflexion est identique que ce soit en Merise ou en UML, mais il ne faut pas tout confondre
    Hervé Delannoy, Ingénieur études&développement.

    Je n'accepte pas les demandes de mise en relation MSN/yahoo sans motif.
    ------------------------------------------------------------------------
    Si , ni , ne peuvent vous aider, mais nous oui, pensez à un pti et au !
    Merci de vous relire
    ____________________________________________________________________________________
    Recherche joueurs de "Magic" sur Lille et environs.
    Donner plutôt que jeter.

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mai 2008
    Messages : 54
    Points : 39
    Points
    39
    Par défaut
    Est-ce que je peux representer ma table ainsi:
    IdEp Nom IdSu
    E001 Toto 0
    E002 Lolo E001
    E003 Stef E001
    E004 Paul 0
    E005 Jean E002

    Est-ce qu'on peut associer l'employé E001 au deuxieme cas(chaque employé est le supérieur hiérarchique direct de 0 ou plusieurs employés) et E002 à E005 au premier cas(chaque employé a 0 ou 1 supérieur hiérarchique direct). Est-ce que la table est correcte, sinon, comment on peut la représentée.

    je veux comprendre. Merci deja pour votre aide.

  5. #5
    Membre expert
    Avatar de hed62
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juillet 2007
    Messages
    2 029
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 029
    Points : 3 134
    Points
    3 134
    Par défaut
    Je préfèrerai deux tables:

    Employe
    IdEp Nom
    E001 Toto
    E002 Lolo
    E003 Stef
    E004 Paul
    E005 Jean

    Hierarchie
    IdEp IdSu
    E002 E001
    E003 E001
    E005 E002
    Hervé Delannoy, Ingénieur études&développement.

    Je n'accepte pas les demandes de mise en relation MSN/yahoo sans motif.
    ------------------------------------------------------------------------
    Si , ni , ne peuvent vous aider, mais nous oui, pensez à un pti et au !
    Merci de vous relire
    ____________________________________________________________________________________
    Recherche joueurs de "Magic" sur Lille et environs.
    Donner plutôt que jeter.

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mai 2008
    Messages : 54
    Points : 39
    Points
    39
    Par défaut
    Ah bon okey, je comprends. Mais est-ce que cela veut dire que je dois avoir deux tables pour quelque soit la cardinalité?

    ensuite,
    Prenons par exemple le type "PERSONNE" avec ses deux associations d'où:
    1- Un papa peut avoir 0 ou Plusieurs fils (0..n)
    2- Un fils peut avoir un papa (1..1)
    est-ce ce que j'aurai tjrs deux tables?
    Personne(idP,Nom)
    Fils(idF,idP)

  7. #7
    Nouveau membre du Club
    Inscrit en
    Juin 2008
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 39
    Points : 29
    Points
    29
    Par défaut
    C'est justement la cardinalité qui va t'indiquer si tu as plusieurs tables ou non, c'est pour cette raison qu'elle sont cruciales.

    Dans ton exemple, un pere peut avoir plusieurs fils, il est donc interressant d'avoir une autre table mettant en relation pere et fils, c'est une cardinalité 0..N du côté du pere et 1..1 du côté du fils.

    Maintenant si on prend l'exemple d'une table éleve et une relation "binome", on aura obligatoirement 1 élève relié à 0 ou 1 seul autre élève, la on peut se permettre de mettre le champ "binome" dans la table éleve pointant vers le binome de l'éleve enregistré.

    Lorsque que tu te demande combien de table il faut faire dans n'importe quelle relation, pose toi le problème des cardinalités , si un truc A est en relation avec un et un seul truc B, alors dans la table des truc A on aura la clé étrangere qui pointe vers un truc B , par contre si un truc A peut être en relation à plusieurs trucs B alors la relation va se transformer en une nouvelle table avec comme clé le couple (id_truc_a , id_truc_b).

  8. #8
    Membre expert
    Avatar de hed62
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juillet 2007
    Messages
    2 029
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 029
    Points : 3 134
    Points
    3 134
    Par défaut
    La seconde table est surtout présente pour éviter les valeurs nulle. Elle sera également présente dans le cas du binome, puisque la cardinalité minimale donnée est 0.

    Il n'y aurait pas eu de seconde table dans le cas d'une cardinalité 1.1 - 1.1 dans l'association reflexive.
    Hervé Delannoy, Ingénieur études&développement.

    Je n'accepte pas les demandes de mise en relation MSN/yahoo sans motif.
    ------------------------------------------------------------------------
    Si , ni , ne peuvent vous aider, mais nous oui, pensez à un pti et au !
    Merci de vous relire
    ____________________________________________________________________________________
    Recherche joueurs de "Magic" sur Lille et environs.
    Donner plutôt que jeter.

  9. #9
    Nouveau membre du Club
    Inscrit en
    Juin 2008
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 39
    Points : 29
    Points
    29
    Par défaut
    autant pour moi ... je n'avais pas pensé à la possibilité d'avoir ce type de cardinalité dans une association...

  10. #10
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mai 2008
    Messages : 54
    Points : 39
    Points
    39
    Par défaut
    hed62
    si c impossible d'avoir une seconde table dans le cas d'une cardinalité 1.1 - 1.1 dans une association reflexive, pour mon deuxieme exemple, comment je peux faire avec une table?

  11. #11
    Membre expert
    Avatar de hed62
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juillet 2007
    Messages
    2 029
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 029
    Points : 3 134
    Points
    3 134
    Par défaut
    Puisqu'il y a au moins une occurence, et au plus une occurence, ta première modélisation fonctionne.

    IdEt Nom IdBinome
    E001 Toto E002
    E002 Lolo E001
    E003 Stef E004
    E004 Paul E003
    Hervé Delannoy, Ingénieur études&développement.

    Je n'accepte pas les demandes de mise en relation MSN/yahoo sans motif.
    ------------------------------------------------------------------------
    Si , ni , ne peuvent vous aider, mais nous oui, pensez à un pti et au !
    Merci de vous relire
    ____________________________________________________________________________________
    Recherche joueurs de "Magic" sur Lille et environs.
    Donner plutôt que jeter.

  12. #12
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mai 2008
    Messages : 54
    Points : 39
    Points
    39
    Par défaut
    Avec cette cardinalité cela 'm parrait diff
    Je'n comprends pas pourquoi E001 à pour superiireu hierarchique E002, puis E002 à pour superiireu hierarchique E001!!!
    Ensuite d'apres le deuxieme exemple que j'ai pris (PERSONNE)
    "PERSONNE" avec ses deux associations d'où:
    1 cas - Un papa peut avoir 0 ou Plusieurs fils (0..n)
    2 cas - Un fils peut avoir un papa (1..1)

    IDP NOM IDF
    P01 mxx P02
    P02 myy
    P03

    IDP(ID_PERSONNE) et IDF(ID_FILS)

    Je suis blocké, je n'arrive pas, à partir de cette table à faire resortir les deux cas.

  13. #13
    Membre expert
    Avatar de hed62
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juillet 2007
    Messages
    2 029
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 029
    Points : 3 134
    Points
    3 134
    Par défaut
    Je'n comprends pas pourquoi E001 à pour superiireu hierarchique E002, puis E002 à pour superiireu hierarchique E001!!!
    Ma précédente réponse correspondait à l'hypothèse des binomes

    Le problème Pere - Fils est identique au problème Employe - Superieur
    Hervé Delannoy, Ingénieur études&développement.

    Je n'accepte pas les demandes de mise en relation MSN/yahoo sans motif.
    ------------------------------------------------------------------------
    Si , ni , ne peuvent vous aider, mais nous oui, pensez à un pti et au !
    Merci de vous relire
    ____________________________________________________________________________________
    Recherche joueurs de "Magic" sur Lille et environs.
    Donner plutôt que jeter.

  14. #14
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mai 2008
    Messages : 54
    Points : 39
    Points
    39
    Par défaut
    Donc la reponse #7 de juju034 est bonne?

    Ensuite, S'ils sont identique, donc j'aurai une deuxieme table pour le probleme Personne-Fils?

  15. #15
    Nouveau membre du Club
    Inscrit en
    Juin 2008
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 39
    Points : 29
    Points
    29
    Par défaut
    Je ne sais pas si ca va t'aider, mais je viens d'avoir un exemple de relation reflexive dans le projet sur lequel je suis en train de travailler.

    Deja on a une table compte_utilisateur :

    Id_compte
    Nom
    Prenom
    date_derniere_modification

    Le truc c'est que un utilisateur peut, selon son profil, en modifier un autre.
    On a donc une relation "Modifier" du type 0,N - 0,1 (un modifiant modifie 0 ou plusieurs comptes et un compte est modifié par 0 ou 1 autre compte car on ne retient que la derniere modification).

    Bon chouette, alors la maintenant j'ai le choix.
    Soit je fais une table de cette relation et j'ai :
    Modifier :
    id_compte_modifiant
    id_compte_modifié

    Soit dans la table compte_utilisateur je me retrouve avec l'identifiant de celui qui modifie:

    Compte_utilisateur:
    Id_compte
    Nom
    Prenom
    date_derniere_modification
    FK_id_compte_modifiant

    Je pense que la chacun aura ses préférences.
    Ce problème est le même que employé-supérieur.

    Perso, je ne pense pas que je ferais une deuxième table car j'estime que id_compte_modifiant dépend directement de id_compte, et puis si personne ne modifie un compte ce champ prendra la valeur null.

    Et je pense que je me serais débrouiller de cette manière pour le problème père fils mais cela n'engage que moi.

    Enfin pour ce qui est de la cardinalité 1-1, 1-1 je doute fortement que se soit possible, en effet lors d'une relation non réflexive la question ne se pose pas une telle cardinalité serait triviale (c'est un dépendance fonctionnelle, d'ailleurs impossible à paramétrer sous un logiciel comme win design), et je crois sincèrement que c'est de même pour une relation réflexive.

    Voila en espérant que cet exemple te servira, maintenant c'est juste ma vision des choses

  16. #16
    Membre expert
    Avatar de hed62
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juillet 2007
    Messages
    2 029
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 029
    Points : 3 134
    Points
    3 134
    Par défaut
    ce champ prendra la valeur null.
    C'est bien là tout le problème. Les valeurs nulles sont à éviter au plus possible dans une base de données. Je transfère dans le forum Schéma pour qu'un expert puisse confirmer mes dires
    Hervé Delannoy, Ingénieur études&développement.

    Je n'accepte pas les demandes de mise en relation MSN/yahoo sans motif.
    ------------------------------------------------------------------------
    Si , ni , ne peuvent vous aider, mais nous oui, pensez à un pti et au !
    Merci de vous relire
    ____________________________________________________________________________________
    Recherche joueurs de "Magic" sur Lille et environs.
    Donner plutôt que jeter.

  17. #17
    Membre chevronné
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Août 2007
    Messages
    797
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Août 2007
    Messages : 797
    Points : 2 060
    Points
    2 060
    Par défaut Un peu de rétro-conception
    Bonjour à tous,

    Si la solution présentée par hed62 est peut-être satisfaisante techniquement (elle a le mérite de supprimer les Null), elle l'est moins conceptuellement.
    Citation Envoyé par hed62 Voir le message
    Je préfèrerai deux tables:

    Employe
    IdEp Nom
    E001 Toto
    E002 Lolo
    E003 Stef
    E004 Paul
    E005 Jean

    Hierarchie
    IdEp IdSu
    E002 E001
    E003 E001
    E005 E002
    La rétro-conception de ce modèle logique donne ceci :

    Nom : Employé_subordonné.gif
Affichages : 4135
Taille : 3,9 Ko

    La flèche épaisse ouverte représente un lien de généralisation - spécialisation.
    La cardinalité 1,1 correspond au résultat voulu par hed62, à savoir la suppression des Null.

    Notez au passage que j'ai renommé l'entité correspondant à la table "Hiérarchie" en "Employé_subordonné". Bien que le terme "Hiérarchie" ne soit pas conceptuellement faux et représente bien la réalité décrite, il ne nomme pas correctement l'entité en tant que spécialisation de "Employé".

    Vous voyez qu'on est loin du MCD initial par la simple volonté d'éliminer les Null.

    En conclusion, je dirai qu'il faut porter une attention particulière, lors des optimisations des niveaux logique et physique, à ne pas trop s'éloigner de la sémantique d'origine.


    JPhi33
    N'oubliez pas de consulter les Cours Merise et la F.A.Q. Merise
    _______________________________________________________

    Les Règles du Club Developpez.com
    Vous avez votre réponse ? Merci de cliquer sur

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


    Citation Envoyé par JPhi33 Voir le message
    Notez au passage que j'ai renommé l'entité correspondant à la table "Hiérarchie" en "Employé_subordonné". Bien que le terme "Hiérarchie" ne soit pas conceptuellement faux et représente bien la réalité décrite, il ne nomme pas correctement l'entité en tant que spécialisation de "Employé".
    Sémantiquement parlant, la modélisation proposée par JPhi33 est évidemment la meilleure qui soit et c’est celle qu’il faut utiliser.

    Toutefois, l’amateur de représentation graphique à la mode anglo-saxonne peut considérer Hiérarchie comme entité-type associative (au sens de Codd) et préciser le rôle dominant de l’entité-type Employe par rapport à l’entité-type Hierarchie (rôle symbolisé par (D) dans le MCD). (Outil utilisé : Power AMC.)
    Maintenant, au niveau logique, il faut aussi considérer l’impact de la suppression d’un employé (table Employe) : si on utilise l’option CASCADE dans le contexte de l’intégrité référentielle (table Hierarchie), cette suppression aura pour effet de rompre les liens avec ses subordonnés (table Hierarchie). La suppression du PDG se traduit donc par la "promotion" automatique de ses collaborateurs directs.

    Pour en revenir au tout premier schéma présenté par calito, au niveau MLD on aura une table Employe s’auto-référençant et du fait de CASCADE (si le SGBD l’autorise, ce qui est le cas par exemple de DB2), si l’on supprime le PDG, à la fin de l’opération la table Employe sera vide.

    Le choix de la modélisation au niveau conceptuel n’est pas neutre dans ses effets (indépendamment de la présence éventuelle du bonhomme NULL).
    (a) Faites simple, mais pas plus simple ! (A. Einstein)
    (b) Certes, 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
    Modéliser les données avec MySQL Workbench
    Je ne réponds pas aux questions techniques par MP. Les forums sont là pour ça.

  19. #19
    Membre expert
    Avatar de hed62
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juillet 2007
    Messages
    2 029
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 029
    Points : 3 134
    Points
    3 134
    Par défaut
    Je savais bien que j'avais encore des lacunes ><

    Comment faire, alors, pour passer du MCD d'origine, avec une asssociation réfléxive donc, à un MPD qui ne contiendrait pas de valeur nulle, sans trop s'éloigner de la sémantique de départ ?
    Hervé Delannoy, Ingénieur études&développement.

    Je n'accepte pas les demandes de mise en relation MSN/yahoo sans motif.
    ------------------------------------------------------------------------
    Si , ni , ne peuvent vous aider, mais nous oui, pensez à un pti et au !
    Merci de vous relire
    ____________________________________________________________________________________
    Recherche joueurs de "Magic" sur Lille et environs.
    Donner plutôt que jeter.

  20. #20
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mai 2008
    Messages : 54
    Points : 39
    Points
    39
    Par défaut
    Donc pour l'exemple PERSONNE
    Je peux avoir deux tables?
    Personne(id_personne, nom)
    Fils(id_personne, id_personne_fils)

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [MLD] association reflexive pour une nomenclature
    Par Armagnak dans le forum Schéma
    Réponses: 8
    Dernier message: 05/03/2013, 10h05
  2. MPD association reflexive
    Par gogos dans le forum Modélisation
    Réponses: 2
    Dernier message: 19/02/2008, 08h14
  3. [DC] Héritage, association reflexive
    Par zghidi dans le forum Diagrammes de Classes
    Réponses: 12
    Dernier message: 09/01/2008, 11h21
  4. [Access 2003] Probleme avec une association reflexive
    Par softstar dans le forum Langage SQL
    Réponses: 7
    Dernier message: 17/08/2006, 13h43
  5. creation table association reflexive
    Par elea1206 dans le forum Requêtes
    Réponses: 2
    Dernier message: 05/08/2003, 17h30

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