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

 MySQL Discussion :

modeliser relation pere fil


Sujet :

MySQL

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 21
    Points : 14
    Points
    14
    Par défaut modeliser relation pere fil
    je voudrais savoir svp comment on modelise la relation pere fils
    si on prend l'exemple de l'entite personne et l'association avoir
    je ne sais pas comment mettre la cardinalite sur les deux lien entre l 'entité et l'association en respectant les contraintes un pere peut avoir plusieur fils et un fils ne peut appatenir qua aun seul pere et un fils par suite a la meme chose

  2. #2
    Membre expert Avatar de KiLVaiDeN
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 851
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 851
    Points : 3 481
    Points
    3 481
    Par défaut
    Bonjour,

    Il s'agit d'une seule et même relation, reflexive.

    La cardinalité est

    personne (0..n) --- est parent de ---> (1..1) personne
    K

  3. #3
    Membre expert Avatar de KiLVaiDeN
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 851
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 851
    Points : 3 481
    Points
    3 481
    Par défaut
    FAUX !

    En fait, une même personne peut avoir 2 parents ( a forcement 2 parents ) ! j'ai été confu par ton exemple père-fils, mais pourquoi ne pas modéliser directement la relation parent enfant ?

    Il faut examiner les contraintes de ton application : est-ce qu'une personne donnée doit FORCEMENT avoir ses deux parents listés ? Est-il possible qu'une personne donnée ne possède pas de parent, si ils sont inconnus ? Dans tous les cas, pour pouvoir être réactif en cas d'eventualité de ce genre, il est toujours mieux de modéliser selon une relation de type 0..n même si "AU MOINS UN" élément doit être présent, car ça rend ton modèle plus flexible, bien que moins rigoureux.. Les contraintes d'intégrités ne seront pas aussi fortes, et seront plus permissives.
    K

  4. #4
    Rédacteur
    Avatar de pcaboche
    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    2 785
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Singapour

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 785
    Points : 9 716
    Points
    9 716
    Par défaut
    Ca, c'est une première façon de faire (et la seule au niveau modélisation).

    Maintenant, au niveau implémentation, on a une deuxième façon de faire: utiliser un code hiérarchique significatif.

    Dans un autre sujet (http://www.developpez.net/forums/viewtopic.php?t=425244), je prennais l'exemple de produits informatiques:

    /Périphériques
    /Périphériques/Imprimantes
    /Périphériques/Imprimantes/Jet d'encre
    /Périphériques/Imprimantes/Laser
    /Périphériques/Imprimantes/Laser/Noir et Blanc
    /Périphériques/Imprimantes/Laser/Couleur
    ...

    Voici un exemple de code hiérarchique significatif correspondant:

    PER
    PER-IMP
    PER-IMP-JET
    PER-IMP-LAS
    PER-IMP-LAS-NeB
    PER-IMP-LAS-COU
    ...

    La clef de la catégorie est une chaine de caractères.

    Avantages:
    - Le code est significatif (on voit à quoi il correspond)
    - Il est très facile et extrêmement rapide de sélectionner tous les produits d'une même famille, et même de classer les produits par famille, sans faire de boucles:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    #Toutes les mprimantes (Jets d'encre, Laser, couleur, N&B)
     
    SELECT *
    FROM produit
    WHERE famille_ref LIKE "PER-IMP-%"
    Inconvénients:
    - La catégorie est représentée par une chaine (prend plus de place)
    - Il faut bien réfléchir à la manière d'implémenter le code
    - Ne convient pas à tous les problèmes
    "On en a vu poser les armes avant de se tirer une balle dans le pied..."
    -- pydévelop

    Derniers articles:

    (SQL Server) Introduction à la gestion des droits
    (UML) Souplesse et modularité grâce aux Design Patterns
    (UML) Le Pattern Etat
    Autres articles...

  5. #5
    Membre régulier Avatar de bmayer
    Inscrit en
    Décembre 2003
    Messages
    153
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 153
    Points : 79
    Points
    79
    Par défaut
    Citation Envoyé par KiLVaiDeN
    FAUX !
    En fait, une même personne peut avoir 2 parents ( a forcement 2 parents ) !
    Faux, ... dans le cas d'une relation sexuée. Et encore, la question est pere -> fils. Donc apres avoir etabli si l'on parle de pere de lait ou de pere de sang, la relation a bien une cardinalite 1 -...

    Bon, ma reponse est limite troll

    Serieux. C'est qq chose que j'utilise assez souvent. Sans doute comme des tas d'autres personnes.

  6. #6
    Membre expert Avatar de KiLVaiDeN
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 851
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 851
    Points : 3 481
    Points
    3 481
    Par défaut
    Hehe, tout comme beaucoup de choses dans ce bas monde ( peut-on tomber plus bas ? ) c'est une question de contexte
    K

  7. #7
    Rédacteur
    Avatar de pcaboche
    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    2 785
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Singapour

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 785
    Points : 9 716
    Points
    9 716
    Par défaut
    Moi, il y a une question que je me suis toujours posée. Imaginons que l'on ait la table suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    CREATE TABLE uneTable (
      id INT NOT NULL,
      parent_id INT NULL, # le sommet de la hierarchie n'a pas de père
      ...
     
      PRIMARY KEY(id)
    ) ;
    donc, dans l'exemple, on a une cardinalité 0,1 entre le parent et l'enfant (on peut transposer le problème à la cardinalité 0,n en ajoutant une association)

    Est-il possible d'écrire facilement une requète (ou une procédure stockée) pour afficher tous les descendants d'un noeud (= le sous-arbre), ou faut-il passer par une fonction récursive en PHP pour parcourir la hiérarchie?
    "On en a vu poser les armes avant de se tirer une balle dans le pied..."
    -- pydévelop

    Derniers articles:

    (SQL Server) Introduction à la gestion des droits
    (UML) Souplesse et modularité grâce aux Design Patterns
    (UML) Le Pattern Etat
    Autres articles...

  8. #8
    Membre émérite Avatar de Maximil ian
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 622
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 622
    Points : 2 973
    Points
    2 973
    Par défaut
    Citation Envoyé par pcaboche
    Est-il possible d'écrire facilement une requète (ou une procédure stockée) pour afficher tous les descendants d'un noeud (= le sous-arbre), ou faut-il passer par une fonction récursive en PHP pour parcourir la hiérarchie?
    Une procédure stockée (récursive) oui, une simple requête non. On peut par contre opter pour un autre type de modélisation avec la représentation intervallaire.
    Pensez au bouton

  9. #9
    Membre expert Avatar de KiLVaiDeN
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 851
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 851
    Points : 3 481
    Points
    3 481
    Par défaut
    Personellement, je pense que si l'un des objectifs de l'application est de faire une recherche de descendance, rien n'empêche de rajouter une table au modèle, comme suit :

    DESCENDANT
    idancetre
    iddescendant
    niveau_descendance

    Du coup, obtenir le père d'une personne correspondrait à une requete sur le iddescendant correspondant, d'un niveau de descendance 1, et donc le sexe du idancetre correspondant serait M

    Ptet qu'il y a plus malin, et ce n'est qu'une suggestion
    K

  10. #10
    Rédacteur
    Avatar de pcaboche
    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    2 785
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Singapour

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 785
    Points : 9 716
    Points
    9 716
    Par défaut
    Merci Maximilian, cela répond à une question que je me posais depuis pas mal de temps déjà... Article très intéressant !
    "On en a vu poser les armes avant de se tirer une balle dans le pied..."
    -- pydévelop

    Derniers articles:

    (SQL Server) Introduction à la gestion des droits
    (UML) Souplesse et modularité grâce aux Design Patterns
    (UML) Le Pattern Etat
    Autres articles...

  11. #11
    Membre régulier Avatar de bmayer
    Inscrit en
    Décembre 2003
    Messages
    153
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 153
    Points : 79
    Points
    79
    Par défaut
    Citation Envoyé par pcaboche
    Est-il possible d'écrire facilement une requète (ou une procédure stockée) pour afficher tous les descendants d'un noeud (= le sous-arbre), ou faut-il passer par une fonction récursive en PHP pour parcourir la hiérarchie?
    Allez, une mauvaise reponse.
    J'ai une table, etape_designe_suivante eds {etape int, suivante int}

    etape suivante
    1 2
    2 3
    3 Null

    Par une jointure qui va bien (eds.etape = eds.suivante), je determine facilement la premiere et la derniere. Par contre, pas l'enchainement.
    A cette fin, avec MySQL 4, (pas de procedures), j'ai tombé la table dans un tableau MySQL, et j'ai utilisé une fonction recursive afin de pouvoir demonter une genealogie. Ca a ete le moyen qui donnait les resultats les + rapides.

    esperant avoir eclairé ta lanterne

  12. #12
    Rédacteur
    Avatar de pcaboche
    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    2 785
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Singapour

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 785
    Points : 9 716
    Points
    9 716
    Par défaut
    Ce que tu me dis là, bmayer, me fait penser à un parcours de graphe, sauf qu'en plus, dans un parcours de graphe (qu'il soit en profondeur, en largeur ou avec heuristique), il faut ajouter un booléen "visite" (ou tout autre moyen permettant de savoir si le noeud a déjà été visité) pour éviter de tourner en rond.

    L'arbre est une forme particulière de graphe telle que l'on a pas de boucles (donc ça ne pose pas de problème)

    Bon, on s'éloigne du sujet original, mais c'est quand même très intéressant...
    "On en a vu poser les armes avant de se tirer une balle dans le pied..."
    -- pydévelop

    Derniers articles:

    (SQL Server) Introduction à la gestion des droits
    (UML) Souplesse et modularité grâce aux Design Patterns
    (UML) Le Pattern Etat
    Autres articles...

  13. #13
    Membre régulier Avatar de bmayer
    Inscrit en
    Décembre 2003
    Messages
    153
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 153
    Points : 79
    Points
    79
    Par défaut
    Citation Envoyé par pcaboche
    Ce que tu me dis là, bmayer, me fait penser à un parcours de graphe, sauf qu'en plus, dans un parcours de graphe (qu'il soit en profondeur, en largeur ou avec heuristique), il faut ajouter un booléen "visite" (ou tout autre moyen permettant de savoir si le noeud a déjà été visité) pour éviter de tourner en rond.

    L'arbre est une forme particulière de graphe telle que l'on a pas de boucles (donc ça ne pose pas de problème)

    Bon, on s'éloigne du sujet original, mais c'est quand même très intéressant...
    Un peu que c'est interessant.
    Je ne suis pas certain que ce soit loin/hors sujet. La question est posee ainsi, mais le besoin, derriere, que nous ne connaissons pas, provient peut etre d'une analyse dans laquelle la meconaissance du sujet (graphe) fait penser/imaginer a qq chose (pere - fils) de connu, mais pas forcement d'adapté.
    Il faudrait justement, non seulement approfondir, mais aussi poser les bases du sujet (graphe)avant, ce qui semble dans tes possibilites, si tu le veux bien.

    Quel est l'avis de chacun ?
    (C'est mon coté "democrate" qui ressort ;o)

  14. #14
    Rédacteur
    Avatar de pcaboche
    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    2 785
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Singapour

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 785
    Points : 9 716
    Points
    9 716
    Par défaut
    Citation Envoyé par bmayer
    Il faudrait justement, non seulement approfondir, mais aussi poser les bases du sujet (graphe)avant, ce qui semble dans tes possibilites, si tu le veux bien.
    Moi, je veux bien parler de graphes, mais il y a déjà tout ce qu'il faut sur internet sur le sujet:
    http://fr.wikipedia.org/wiki/Th%C3%A9orie_des_graphes

    Et puis, on n'a toujours pas eu de réaction de la part de flawer (l'auteur de ce fil) et on ne sait toujours pas ce qu'il veut ni si il a trouvé son bonheur dans nos réponses.
    "On en a vu poser les armes avant de se tirer une balle dans le pied..."
    -- pydévelop

    Derniers articles:

    (SQL Server) Introduction à la gestion des droits
    (UML) Souplesse et modularité grâce aux Design Patterns
    (UML) Le Pattern Etat
    Autres articles...

  15. #15
    Membre régulier Avatar de bmayer
    Inscrit en
    Décembre 2003
    Messages
    153
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 153
    Points : 79
    Points
    79
    Par défaut
    Citation Envoyé par pcaboche
    Moi, je veux bien parler de graphes, mais il y a déjà tout ce qu'il faut sur internet sur le sujet:
    http://fr.wikipedia.org/wiki/Th%C3%A9orie_des_graphes
    Wouaouh !
    C'est aride. Pour les nuls comme moi, il y a la meme chose avec des exemples d'application ? ;o]

    Citation Envoyé par pcaboche
    Et puis, on n'a toujours pas eu de réaction de la part de flawer (l'auteur de ce fil) et on ne sait toujours pas ce qu'il veut ni si il a trouvé son bonheur dans nos réponses.
    Tu as raison, on fait du bruit sur sa conversation. Je sors de ce fil, si tu as la gentillesse de me montrer matiere a approfondir pour un nul (Tiens, un ouvrage a ecrire, Utilisation des graphes et autres etrangetes pour les Nuls), marcel_ducamion CHEZ yahoo POINT fr
    Merci d'avance.

  16. #16
    Rédacteur
    Avatar de pcaboche
    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    2 785
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Singapour

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 785
    Points : 9 716
    Points
    9 716
    Par défaut
    Citation Envoyé par bmayer
    Wouaouh !
    C'est aride. Pour les nuls comme moi, il y a la meme chose avec des exemples d'application ? ;o]
    T'es pas obligé de tout lire non plus (les définitions formelles sont assez hards)

    Les parties les plus importantes (pour un débutant):
    - Exemples de représentation par des graphes
    - Champ d'utilisation
    - Classes de graphes
    - Algorithmes:
    * parcours en largeur
    * parcours en profondeur
    * algo de Dijkstra
    * algo de Kruskal
    * algo de Prim
    * coloration d'un graphe

    Sinon, il y a aussi les liens externes qui ont l'air pas mal.

    Citation Envoyé par bmayer
    marcel_ducamion CHEZ yahoo POINT fr
    C'est ton vrai nom ou t'as trop regardé "C'est pas sorcier" ?
    "On en a vu poser les armes avant de se tirer une balle dans le pied..."
    -- pydévelop

    Derniers articles:

    (SQL Server) Introduction à la gestion des droits
    (UML) Souplesse et modularité grâce aux Design Patterns
    (UML) Le Pattern Etat
    Autres articles...

  17. #17
    Membre régulier Avatar de bmayer
    Inscrit en
    Décembre 2003
    Messages
    153
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 153
    Points : 79
    Points
    79
    Par défaut
    Citation Envoyé par pcaboche
    T'es pas obligé de tout lire non plus (les définitions formelles sont assez hards)

    Les parties les plus importantes (pour un débutant):
    - Exemples de représentation par des graphes
    Ah ? je les ai loupé !

    Citation Envoyé par pcaboche
    Sinon, il y a aussi les liens externes qui ont l'air pas mal.
    Pas encore eu le temps de suivre ...

    Citation Envoyé par bmayer
    marcel_ducamion CHEZ yahoo POINT fr
    Citation Envoyé par pcaboche
    C'est ton vrai nom ou t'as trop regardé "C'est pas sorcier" ?
    Devines ! C'est une emission que mon grand regardait, et regarde toujours, qd il en a l'opportunite.

  18. #18
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 21
    Points : 14
    Points
    14
    Par défaut
    merci de s'interesser a mon pb et je m'excuse de vous remercier tardivement car j'ai eu un pb d'internet au foyer universitaire.
    en fait mon pb est que j'ai 3 niveaux de processus
    n1: j'ai 5 processus (a,b,c,d,e)
    n2: pour a: a1,a2,a3...
    b:b1,b2,b3..
    de meme pour les autres
    n3: pour a1:a1.1, a1.2, a1.3..
    de meme pour tout les autres

    j'ai modelisé cette relation: process 0.n lien process 0.1
    donc j'ai en fait ajouté un id_process_pere a la table process
    et la mon pb c comment representé cette relation de niveau ou de nomenclature par une requete sql
    j'ai consulté la solution de l'imprimante mais je trouve que si on change de notation d'imprimante la requete n'est plus utilisable
    merci d'avance

  19. #19
    Inactif   Avatar de Médiat
    Inscrit en
    Décembre 2003
    Messages
    1 946
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 946
    Points : 2 227
    Points
    2 227
    Par défaut
    Puisqu'il semble que la profondeur de l'arbre soit fixe et faible :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT a.*, b.*, c.*
    FROM laTable a INNER JOIN laTable b ON a.id_process_pere = b.id_process
                   INNER JOIN laTable c ON b.id_process_pere = c.id_process
    Dans certains cas il faut peut-être des LEFT OUTER à la place des INNER
    J'affirme péremptoirement que toute affirmation péremptoire est fausse
    5ième élément : barde-prince des figures de style, duc de la synecdoque
    Je ne réponds jamais aux questions techniques par MP

  20. #20
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 21
    Points : 14
    Points
    14
    Par défaut
    je m'excuse de ne pas bien m'exprimé
    en fait j'ai une table process:id_process,process_name,niveau,id_process_pere
    et en terme de données j'ai au depart 5 process (a,b,c,d,e) de niveau1
    et chaque process de niveau 1 a une decsendance (n2 des processus) et chaque descendence de niveau 2 a aussi une descendance(n3 des processus) et la ce que je voudrais faire c de choisir un process du niveau 1 d'afficher par la suite tout ces descendances (n2 et n3) et la meme chose pour le niveau n2 (=>n3)
    merci d'avance

Discussions similaires

  1. Relation pere fils dans une meme table
    Par tongo dans le forum Hibernate
    Réponses: 1
    Dernier message: 12/07/2010, 09h35
  2. Relation pere fils
    Par Jordmund dans le forum Modélisation
    Réponses: 1
    Dernier message: 21/11/2007, 10h44
  3. DataGrid relation pere/fils
    Par TheBlackReverand dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 03/01/2007, 18h08
  4. [pthread] relation père - fils ?
    Par jedimind dans le forum C
    Réponses: 3
    Dernier message: 14/11/2005, 11h18
  5. Hibernate et les relations pere/enfant
    Par kurkLord dans le forum Hibernate
    Réponses: 6
    Dernier message: 19/01/2005, 04h37

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