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 réflexive dans MySQL Workbench [MLD]


Sujet :

Schéma

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2013
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2013
    Messages : 31
    Points : 29
    Points
    29
    Par défaut Association réflexive dans MySQL Workbench
    Bonjour à tous,

    Suite à notre dernière discussion, j'aimerais savoir si les deux MLD que j'ai faites sont corrects :

    1. Association réflexive (0,1) - (0,n) :

    MCD

    MLD


    2. Association réflexive (1,1) - (0,n) :
    MCD

    MLD


    Est-ce que je peux renommer "personne_id" en "personne_id_fils" si la table "personne" est liée à d'autres tables dans MySQL Workbench ?

    Merci.

  2. #2
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Les deux schémas me semblent corrects.

    Est-ce que je peux renommer "personne_id" en "personne_id_fils" si la table "personne" est liée à d'autres tables dans MySQL Workbench ?
    Remontons à la règle de gestion dont découlent le MCD.
    Une personne est en parenté (en tant que fils) avec une autre personne et une personne peut être en parenté (en tant que père) avec plusieurs autres personnes.

    L'entité type qui se dégage ici est bien la personne et pas le fils. Le renommage me gène donc pour deux raisons :
    1) personne_id_fils identifie un fils plus qu'une personne ;
    2) personne_id_fils est une manière d'identifier le fils en tant qu'entité type qui hérite de l'entité type "personne" dans le cadre d'un héritage de données or ici il n'y en a pas.

    Autre remarque sur le second schéma...
    Bien qu'il s'agisse probablement d'un exemple fictif, celui-ci pose un sérieux problème, surtout avec MySQL mais peut-être pas seulement :
    Comment insérer la première personne dans la table sinon en la définissant comme étant fils d'elle-même ?
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2013
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2013
    Messages : 31
    Points : 29
    Points
    29
    Par défaut
    Bonjour CinePhil,

    L'entité type qui se dégage ici est bien la personne et pas le fils. Le renommage me gène donc pour deux raisons :
    1) personne_id_fils identifie un fils plus qu'une personne ;
    2) personne_id_fils est une manière d'identifier le fils en tant qu'entité type qui hérite de l'entité type "personne" dans le cadre d'un héritage de données or ici il n'y en a pas.
    Je n'ai pas pensé à ça, mais je trouve ton raisonnement logique et je suis d'accord avec toi.

    Comment insérer la première personne dans la table sinon en la définissant comme étant fils d'elle-même ?
    Et par la suite modifier le champs "personne_id_pere" en mettant la bonne personne.
    Sinon, comment fait-on pour résoudre ce genre de problèmes dans les SGBD ? Est-ce qu'il y a une solution générale pour ça ?

    Merci.

  4. #4
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Si d'aventure j'ai une association avec une cardinalité mini à 1 des deux côtés, je me pose toujours la question de la pertinence de la règle de gestion qui y a abouti.

    Par exemple, le bon sens veut qu'un département contient au moins une ville et qu'une ville soit dans un département.
    département -1,n----contenir----1,1- ville

    Néanmoins, est-il si important d'obliger le département à avoir au moins une ville ?
    Dans la base de données, il s'agira d'une table de référence qui sera pré-remplie de tous les départements français. Il sera toujours temps d'enregistrer ensuite les villes dans la table de référence des villes et d'associer chaque ville à son département.
    Au final, je trouve cette association plus pragmatique :
    département -0,n----contenir----1,1- ville

    Dans la réalité, une fois les tables remplies, chaque département aura effectivement au moins une ville et la règle de gestion de base sera respectée.


    J'ai la même méfiance pour une association réflexive avec une cardinalité 1,1.
    Pour reprendre ton exemple de lien de parenté, est-on sûr qu'on connaîtra toujours le père d'une personne dès l'enregistrement de cette personne ?
    Ne peut-il y avoir des enfants nés de père inconnu ?
    Est-il vraiment nécessaire de gérer à la fois les pères et les fils... jusqu'à Adam ?
    Une discussion avec la maîtrise d'ouvrage peut permettre de tempérer l'absolu de la règle de gestion qui n'a peut-être pas été établie avec toute la réflexion nécessaire.

    Cela ne veut pas dire qu'il faut s'interdire une association réflexive avec une cardinalité mini à 1. Il peut y avoir un moyen de contournement qui permet de respecter la cardinalité sans pour autant poser de grandes difficultés lors de l'implémentation : la valeur par défaut.
    Par exemple, dans une arborescence classique, tout élément a un élément parent, sauf le premier qui peut alors être associé soit à lui-même, soit à un élément "zéro" ou "inconnu". Au programme applicatif de gérer ce cas particulier qui correspond bien à une réalité : la racine de l'arbre.

    Ce n'est peut-être pas très puriste, mais le pragmatisme a du bon !
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  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 001
    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 001
    Points : 30 905
    Points
    30 905
    Billets dans le blog
    16
    Par défaut Associations réflexives, auto-référentielles, etc.
    Bonsoir,


    Citation Envoyé par Age_of_Aquarius Voir le message
    Et par la suite modifier le champs "personne_id_pere" en mettant la bonne personne.
    Sinon, comment fait-on pour résoudre ce genre de problèmes dans les SGBD ?
    Quel que soit le MLD, la cardinalité minimale 1 engendre un problème d’ordre ontologique dans la représentation des hiérarchies et nomenclatures en tous genres : tout le monde a un père, mais comme le fait observer CinePhil, qui dans la base de données est père d’Adam ?

    Quoi qu’il en soit, vous devrez d’abord insérer un tuple dans lequel les attributs personne_id et personne_id_pere prendront la même valeur, signifiant ainsi qu’Adam est père d’Adam... Ça fait bizarre, mais c’est la conséquence de votre modélisation, les SGBD n’y peuvent rien. Quant à « la bonne personne », si ça n’est pas Adam lui-même, elle ne peut être qu’un descendant d’Adam, ce qui provoque un cycle redoutable bien plus difficile à contrôler que la simple auto-référence Adam -> Adam. Dans tous les cas, vous devrez en tenir compte dans vos requêtes pour ne pas voir partir celles-ci dans des boucles infinies...

    La structure de votre table PERSONNE ressemble à celle de la table CATEGORIE ici qui est source évidemment de problèmes identiques. Vous y réfléchissez et éventuellement vous pouvez reprendre au début de la discussion avec Michael, discussion dans laquelle CinePhil ne fait du reste rien qu’à m’embêter...
    (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.

  6. #6
    Membre à l'essai
    Homme Profil pro
    Mécanicien / Infographiste / Développeur en formation
    Inscrit en
    Octobre 2012
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Mécanicien / Infographiste / Développeur en formation

    Informations forums :
    Inscription : Octobre 2012
    Messages : 38
    Points : 24
    Points
    24
    Par défaut
    Suite à la lecture de ce topic et de bien d'autres je dois dire que c'est toujours un plaisir de vous lire messieurs.

    Un grand merci pour le partage si professionnel de vos compétences , les novices comme moi ne sont pas à cours de sources.

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

    Un jour les novices deviendront des vieux routiers...

    Sinon, où en est votre projet Web ? Avez-vous tenu compte des remarques faites ?
    (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.

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

Discussions similaires

  1. [MLD] Association (0,1) - (0,n) dans MySQL Workbench
    Par Age_of_Aquarius dans le forum Schéma
    Réponses: 31
    Dernier message: 26/02/2013, 13h40
  2. Menu 'Recherche' grisé dans mysql workbench
    Par NicolasTT dans le forum Outils
    Réponses: 0
    Dernier message: 09/11/2011, 14h32
  3. Les relations dans MySQL Workbench ?!
    Par Boris56 dans le forum Outils
    Réponses: 0
    Dernier message: 22/08/2011, 19h36
  4. [MLD] Association réflexive dans la SAT
    Par princeau dans le forum Schéma
    Réponses: 1
    Dernier message: 24/10/2010, 17h26
  5. Réponses: 1
    Dernier message: 14/03/2010, 19h08

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