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 :

Faire pointer une table vers 2 autres


Sujet :

MySQL

  1. #1
    Membre averti
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juin 2014
    Messages
    744
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Juin 2014
    Messages : 744
    Points : 336
    Points
    336
    Par défaut Faire pointer une table vers 2 autres
    Bonjour.
    Je n'ai pas trouvé de titre parlant.
    J'ai une table sortie qui contient les parcours de 2 tables parcours.
    Je ne sais pas comment construire ma BDD
    La table sortie contient des dates et des temps qui sont liés à des parcours.
    Ces parcours sont répartis sur 2 tables : parcours et parcours_natation.
    J'ai fait 2 tables au lieu d'une parce que la table parcours contient beaucoup de champs qui ne seront pas utilisés sur les lignes de parcours_natation. En fait seulement 2/15. Pour éviter d'avoir des ligne quasi vides, je trouvais plus "performant" de partir sur cette optique.
    Du coup, je ne sais pas comment construire ces tables.
    Est ce que je dois créer 2 colonnes dans la table sortie contenant les FK de parcours ou parcours_natation ou la valeur NULL (ou -1) ou y a t-il qqchose de plus efficace ?
    Merci de votre avis.

  2. #2
    Expert éminent sénior Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    6 382
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 6 382
    Points : 19 069
    Points
    19 069
    Par défaut
    Salut 69Pierre.

    En vous relisant, je n'ai pas trouvé vos explications plus clair.

    Citation Envoyé par 69Pierre
    J'ai fait 2 tables au lieu d'une, parce que la table parcours contient beaucoup de champs qui ne seront pas utilisés sur les lignes de parcours_natation. En fait seulement 2/15.
    Quelle est la différence de conception de vos deux tables "parcours" et "parcours_natation" ?
    Pouvez-vous détailler ce que vous avez déjà fait et pourquoi l'avoir fait ainsi ?

    Citation Envoyé par 69Pierre
    Pour éviter d'avoir des ligne quasi vides, je trouvais plus "performant" de partir sur cette optique.
    A priori, vous avez mélangé dans votre table "parcours", des notions qui appartiennent à deux ensembles différents.

    Citation Envoyé par 69Pierre
    Ces parcours sont répartis sur 2 tables : parcours et parcours_natation.
    Pourquoi faire deux tables ?

    Avez-vous l'intention de créer d'autres activités, ce qui implique d'avoir d'autres tables, comme par exemple "parcours_marathon" ?

    Citation Envoyé par 69Pierre
    J'ai une table sortie qui contient les parcours de 2 tables parcours.
    Là, je ne vous comprends plus du tout.

    Que représente votre table "sortie" ?

    Citation Envoyé par 69Pierre
    La table sortie contient des dates et des temps qui sont liés à des parcours.
    Vous voulez dire les résultats des participants ?

    Pour la date, je ne comprends pas son rôle, car a priori, "parcours" doit contenir le descriptif de cette compétitions.
    Autrement dit, le lieu, la date ...
    Dans ce cas, la table "sortie" doit pointer sur le descriptif de cette compétition par une clef étrangère.
    Mais inversement, il vous manque une référence concernant le participant, par une autre clef étrangère.
    Dans la table "sortie", il faudra aussi mettre des informations comme le numéro du brassard, ...

    Le mieux est de commencer par poser fonctionnellement le problème que vous désirez résoudre.

    Vous avez différentes compétitions :
    --> natation
    --> marathon

    Vous avez des participants :
    --> nom
    --> prénom
    --> date de naissance

    Vous avez des résultats :
    --> identifiant de participant
    --> identifiant de la compétition
    --> numéro du brassard
    --> temps mis par le participant

    Puis pour une compétition données, vous créez toutes les épreuves qui composent cette compétition, sous la forme d'une table séparée :
    --> table natation
    --> table marathon
    --> table cyclisme

    Par exemple, triathlon composé de trois épreuves qui sont cyclisme, marathon (course à pied) et natation.

    La table compétition va contenir tout ce qui est commun à toutes ces épreuves.
    Pour faire le lien entre les épreuves et la compétition, vous pouvez passer par une table association.
    Car une compétition n'est pas nécessairement composé toujours des mêmes épreuves.

    C'est juste une ébauche. Il faut plus d'information pour savoir comment structurer votre base de données.

    @+
    Si vous êtes de mon aide, vous pouvez cliquer sur .
    Mon site : http://www.jcz.fr

  3. #3
    Membre averti
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juin 2014
    Messages
    744
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Juin 2014
    Messages : 744
    Points : 336
    Points
    336
    Par défaut
    Merci Artemus24.

    Vous avez tout à fait traduit mon problème.



    Vous avez différentes compétitions :
    --> natation
    --> marathon devient Course à Pieds
    --> cyclisme
    --> en fait pour moi, cela correspond à 3 tables comprenant des parcours.

    Vous avez des participants :
    Il s'agit de "mon" entrainement donc un seul participant.

    Vous avez des résultats :
    --> identifiant de participant
    --> identifiant de la compétition
    --> numéro de brassant
    --> temps mis par le participant

    Puis pour une compétition données, vous créez toutes les épreuves qui composent cette compétition, sous la forme d'une table séparée :
    --> table natation
    --> table course à pied
    --> table cyclisme

    Par exemple, triathlon composé de trois épreuves qui sont cyclisme, marathon (course à pied) et natation.

    Donc dans ma table résultats, je veux lier mes résultats à un parcours qui peut être renseigné dans une des 3 tables compétitions.

  4. #4
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 136
    Points : 38 893
    Points
    38 893
    Billets dans le blog
    9
    Par défaut
    Bonjour,

    Vos questions sont du niveau conceptuel, il serait donc plus efficace de poster dans le forum modélisation ou dans le forum merise
    Commencer par les tables conduit souvent à des écueils

    Vous devez en effet bien identifier vos entités-types, comme vous avez commencé à le faire, mais également vos associations, les cardinalités et les contraintes d'intégrité fonctionnelle, bref toutes vos règles de gestion.

    A ce niveau on constate qu'il manque un élément pour associer les différentes épreuves d'une même compétition (ie : les 3 épreuves d'un même triatholon)

    Les forums qui vont bien sont ici :
    Merise : http://www.developpez.net/forums/f25...thodes/merise/
    Modèles : http://www.developpez.net/forums/f62...sation/schema/

  5. #5
    Membre averti
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juin 2014
    Messages
    744
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Juin 2014
    Messages : 744
    Points : 336
    Points
    336
    Par défaut
    Bonjour.
    Oui je pense que c'est plutôt conceptuel.
    De là à prendre en main Merise..
    Mon problème a été élargi.
    Il ne concerne à priori que 2 "groupes" de tables

    résultats :
    --> identifiant de participant
    --> identifiant de la compétition
    --> identifiant du parcours contenu dans une des 3 tables ci-dessous : 3 colonnes différentes avec des FK de la table natation, la table course à pied et la table cyclisme ?
    --> numéro de brassant
    --> temps mis par le participant

    Puis pour une compétition données, vous créez toutes les épreuves qui composent cette compétition, sous la forme d'une table séparée :
    --> table natation
    --> table course à pied
    --> table cyclisme

    Une relation 1-n des tables compétitions vers la table résultat.
    Donc dans ma table résultats, je veux lier mes résultats à un parcours qui peut être renseigné dans une des 3 tables compétitions.

  6. #6
    Expert éminent sénior Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    6 382
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 6 382
    Points : 19 069
    Points
    19 069
    Par défaut
    Salut 69Pierre.

    Citation Envoyé par 69Pierre
    --> numéro de brassant
    Erreur de retranscription de ma part. Il s'agit du numéro du brassard.
    J'ai corrigé cela dans mon message précédent, en mettant la ligne en rouge.

    Citation Envoyé par 69Pierre
    Vous avez tout à fait traduit mon problème.
    Pas exactement, car j'ignore vos besoin, ni ce que vous essayez de faire.

    Citation Envoyé par 69Pierre
    Il s'agit de "mon" entrainement donc un seul participant.
    Je ne le savais pas car vous ne l'avez pas précisez dès le départ.
    Donc en effet, la table des participants n'est plus d'aucune utilité.

    Et combien d'épreuves faites-vous ? J'ai parlé de triathlon, mais ne serait-ce pas plutôt de décathlon ?

    Citation Envoyé par 69Pierre
    Donc dans ma table résultats, je veux lier mes résultats à un parcours qui peut être renseigné dans une des 3 tables compétitions.
    J'ai bien compris votre problème.

    Citation Envoyé par escartefigue
    A ce niveau on constate qu'il manque un élément pour associer les différentes épreuves d'une même compétition (ie : les 3 épreuves d'un même triathlon)
    Non, il ne manque rien. C'est peut-être mal formulé.

    @ 69Pierre : Vous désirez mettre des informations dans votre table "sortie", qui sont en relations avec vos trois tables épreuves.
    Tel que vous le demandez, ce n'est pas possible car toutes les épreuves ne sont pas sur le même modèle.
    Cela va impliquer un gaspillage de place si vous mettez toutes les colonnes dont vous avez besoin pour formuler toutes vos performances de toutes les épreuves.

    A moins de simplifier au maximum, mais dans ce cas là vous allez perdre en précision.

    Donc si un résultat est en relation avec une épreuve, cela implique une relation de type hiérarchique entre vos épreuves et vos résultat.
    Par exemple, la table "résultat marathon" (table fils), sera en relation (par une clef étrangère) avec la table "épreuve marathon" (table père).
    Jusque là, aucun problème, sauf que vous allez dupliquer les tables résultats et épreuves.

    Mais pour identifier une compétition, vous êtes obligé de créer une relation de type hiérarchique, entre la table "competition" et les tables "épreuve"
    La relation va se faire sur une clef étrangère dans la table "épreuve"

    Vos performances seront enregistrées dans la table "résultat marathon".
    Cette table va pointer sur la table "épreuve marathon" par la clef étrangère.
    Vous mettez tout ce qui caractérise l'épreuve, genre :
    --> nombre de participants
    --> date début de l'épreuve
    --> date fin de l'épreuve
    ...

    Puis pour regrouper toutes vos épreuves, vous renseignez la table "[c]compétition[c]".
    Chaque table "épreuve" va pointer sur la même ligne de la table "[c]compétition[c]" par une clef étrangère.
    Vous renseignez, par exemple :
    --> nom de la compétition.
    --> nombre d'épreuves.
    ...

    Dans ce cas là, pour une compétition donnée, vous pouvez avoir au maximum dix épreuves.
    Chaque table "epreuve" va pointer sur la même compétition par une clef étrangère.

    Pour une épreuve donnée, vous aurez un seul résultat (vos performances pour cette épreuve) qui sera stockée dans la table "résultat marathon".

    J'ai généralisé au maximum, car cette façon de procéder va contenir une information qui n'a plus lieu d'être chez vous : le participant.

    Ce participant intervient que dans la table "résultat marathon".
    Il est en relation avec la table "participant" par une clef étrangère.

    Le mieux est de suivre le bon conseil d'Escartefigue : formulez vos besoins dans le forum consacré à Merise.

    @+
    Si vous êtes de mon aide, vous pouvez cliquer sur .
    Mon site : http://www.jcz.fr

  7. #7
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 136
    Points : 38 893
    Points
    38 893
    Billets dans le blog
    9
    Par défaut
    Citation Envoyé par 69Pierre Voir le message
    Bonjour.
    Oui je pense que c'est plutôt conceptuel.
    De là à prendre en main Merise..
    Si vous postez dans le bon forum, vous serez aidés ;-)

    Citation Envoyé par 69Pierre Voir le message
    résultats :
    --> identifiant de participant
    --> identifiant de la compétition
    --> identifiant du parcours contenu dans une des 3 tables ci-dessous : 3 colonnes différentes avec des FK de la table natation, la table course à pied et la table cyclisme ?
    --> numéro de brassant
    --> temps mis par le participant

    Puis pour une compétition données, vous créez toutes les épreuves qui composent cette compétition, sous la forme d'une table séparée :
    --> table natation
    --> table course à pied
    --> table cyclisme

    Une relation 1-n des tables compétitions vers la table résultat.
    Donc dans ma table résultats, je veux lier mes résultats à un parcours qui peut être renseigné dans une des 3 tables compétitions.
    Si vous n'avez pas d'entité-type compétition, vous ne garantissez pas que l'identifiant compétition, obligatoire dans les tables natation, course à pied et cyclisme, est bien le même dans les 3 épreuves pour une même compétition. Pour avoir une clef étrangère intègre, il faut créer l'entité-type où elle est clef primaire.

    De même, coté résultat, vous utilisez un identifiant participant qui est une clef étrangère d'une entité-type que vous ne modélisez pas, ce-faisant, vous n'avez aucune garantie d'intégrité.
    Le même numéro de participant pourra potentiellement etre utilisé pour 2 personnes différentes et inversement, 2 personnes différentes auront peut être le même n° de participant dans 2 compétitions différentes. Comment ferez vous pour retrouver les différents résultats du compétiteur Pierre Kiroul dans les différentes compétitions...

    Enfin, dans la table résultat vous avez pour attribut un temps mis par le participant et un identifiant de parcours vers l'une des 3 tables, comment faites vous si la compétition comprend 2 ou 3 épreuves, vous ne pouvez retrouver que l'une d'entre elles...

    Tout ceci confirme qu'il ne faut pas sauter les étapes. Rédigez vos règles, initiez votre MCD, puis demandez conseil dans le forum consacré

  8. #8
    Membre averti
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juin 2014
    Messages
    744
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Juin 2014
    Messages : 744
    Points : 336
    Points
    336
    Par défaut
    Bonjour.

    J'ai fait ce schéma avec Dia.

    Je ne peux pas faire de liaison 0-->n mais bon c'est représenté par des 1-->n
    Je pense (peut être à tort) que la valeur (de la FK) dans mes colonnes id_natation, id_course_a_pieds et id_cyclisme de la table resultats peut être nulle et dans ce cas mon problème semble résolu.
    J'aurai préféré mettre une autre valeur type -1 mais je ne sais pas si c'est possible et recommandé.

    Nom : Diagramme1.jpeg
Affichages : 342
Taille : 22,2 Ko

    Comment "transférer" cette discussion dans le bon forum ?

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

Discussions similaires

  1. [AC-2003] Faire pointer une table vers n tables liées
    Par ted the Ors dans le forum Requêtes et SQL.
    Réponses: 9
    Dernier message: 16/04/2010, 12h01
  2. [Spip] Faire pointer une rubrique vers une autre page
    Par clgmoliere dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 2
    Dernier message: 15/12/2008, 12h04
  3. DNS : faire pointer un domaine vers un autre
    Par aurapp dans le forum Serveurs (Apache, IIS,...)
    Réponses: 2
    Dernier message: 01/06/2007, 16h38
  4. Réponses: 4
    Dernier message: 25/08/2006, 00h25
  5. Ajout & modif d'une table vers l'autre
    Par BOTIGUA dans le forum Access
    Réponses: 1
    Dernier message: 17/02/2006, 18h00

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