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 :

MCD Relation récursive


Sujet :

Schéma

  1. #1
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2010
    Messages
    95
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2010
    Messages : 95
    Points : 76
    Points
    76
    Par défaut MCD Relation récursive
    Bonjour à tous !

    Voilà je suis en train d'essayer de développer une application pour un club de rugby en java.

    Dans le MCD que je conçois, j'ai une entité Equipe, et après avoir était un peu conseillé, il semblerait qu'il soit préférable de créer une relation récursive sur cette entité Equipe pour créer une relation Match.

    Cependant, dans ce cas, les cardinalités entre Equipe et Match puis Match et Equipe serait 1-1 -[ ]- 1-1 .

    Le problème est que je ne sais pas comment gérer de telles cardinalités dans la réalisation du MLD, surtout que mon association Match contient un id_match, une date, un score etc .

    Merci pour votre aide par avance !

  2. #2
    Expert confirmé Avatar de Richard_35
    Homme Profil pro
    Inscrit en
    Juillet 2007
    Messages
    3 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 3 121
    Points : 4 596
    Points
    4 596
    Par défaut
    Bonjour Lightalex01,

    Citation Envoyé par Lightalex01
    Cependant, dans ce cas, les cardinalités entre Equipe et Match puis Match et Equipe serait 1-1 -[ ]- 1-1.
    ==> non :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
       |------0,n------|
    Equipe      [Disputer match]
       |------2,2------|
    Ce qui donne :
    Equipe(Id_Equipe, Nom, ...) ;
    Match(Id_Match, #Id_Equipe_1, #Id_Equipe_2, Date, Score_Equipe_1, Score_Equipe_2, ...) ;
    ==> index unique {#Id_Equipe_1, #Id_Equipe_2}.
    ou
    Equipe(Id_Equipe, Nom, ...) ;
    Match(Id_Match, Date, ...) ;
    Match_Equipe(#Id_Match, #Id_Equipe, Score, ...) ;
    ==> trigger interdisant des matchs de plus de deux équipes.
    Dis-nous et à bientôt,
    Richard.
    ----------------------------------------------------------------------------------------------
    En cas de résolution, et afin de faciliter la tâche des bénévoles, merci de cliquer sur .
    et permettent aux forumeurs de cibler leur recherche dans une discussion : n'hésitez pas à voter !

  3. #3
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2010
    Messages
    95
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2010
    Messages : 95
    Points : 76
    Points
    76
    Par défaut
    Merci pour le coup de main, je vais essayer la première solution, j'espère que ça marchera bien comme ça !

    -----------------------------------

    Deux petits points sur lesquels j'ai besoin d'éclaircissements si possible :

    • Si mes cardinalités sont de 0,n de l'entité Equipe vers l'association Disputer un match, puis 2,2 , normalement il ne peut y avoir création d'une table Match lors de la conversion en MLD comme vous me le suggérez (je ne suis pas très sûr) !

    • Autre problème, je possède une entité Joueur dans ce MCD, et j'aimerais garder une sorte d'Historique pour chaque match et chaque joueur afin d'avoir le nombre de point marquer par un joueur, le nombre de cartons pris etc. Auriez-vous une aidé de la manière de concevoir ceci au travers du MCD ?


    Merci d'avance !

  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
    Pas d'accord avec ton schéma Richard !
    Selon celui-ci, une équipe participe au moins deux fois et au plus deux fois à l'association "disputer match".

    Je ferais plutôt ceci :
    equipe -0,n----disputer----2,2- match

    Ou encore ceci :
    equipe -0,n----recevoir----1,1- match
    |-----------0,n----se déplacer----1,1---|

    Ce qui doit donner les mêmes tables :
    equipe (eq_id, eq_nom...)
    match (mtc_id, mtc_id_equipe_receveuse, mtc_id_equipe_visiteuse, mtc_date...)

    Avec peut-être une contrainte d'unicité sur le triplet {mtc_id_equipe_receveuse, mtc_id_equipe_visiteuse, mtc_date} pour empêcher deux équipes de se rencontrer plusieurs fois le même jour. Encore que dans un tournoi, cela est possible (en poule et en finale par exemple).

    Autre problème, je possède une entité Joueur dans ce MCD, et j'aimerais garder une sorte d'Historique pour chaque match et chaque joueur afin d'avoir le nombre de point marquer par un joueur, le nombre de cartons pris etc. Auriez-vous une aidé de la manière de concevoir ceci au travers du MCD ?
    Maintenant qu'il y a une entité type "match" dans le MCD (et donc une table "match" dans la BDD), il est facile d'associer les joueurs à un match :
    joueur -0,n----participer----0,n- match

    Je ne peux pas le représenter ici mais il faut en plus une contrainte indiquant que les joueurs participant à un match doivent faire partie d'une des équipes du match.... au moment du match !
    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 confirmé Avatar de Richard_35
    Homme Profil pro
    Inscrit en
    Juillet 2007
    Messages
    3 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 3 121
    Points : 4 596
    Points
    4 596
    Par défaut
    Bonjour Philippe et Lightalex01,

    Citation Envoyé par Philippe
    Pas d'accord avec ton schéma Richard !
    ==> tu as raison : je ne le suis pas non plus (schéma un peu rapide). Tes deux représentations sont les bonnes.


    @Lightalex01
    sur la forme : il vaut mieux créer un nouveau message dans la même discussion, que de modifier un ancien message...
    sur le fond :
    Citation Envoyé par =Philippe
    Maintenant qu'il y a une entité type "match" dans le MCD (et donc une table "match" dans la BDD), il est facile d'associer les joueurs à un match :
    joueur -0,n----participer----0,n- match

    Je ne peux pas le représenter ici mais il faut en plus une contrainte indiquant que les joueurs participant à un match doivent faire partie d'une des équipes du match.... au moment du match !
    ==> il faut, peut-être, faire intervenir une notion de "saison" (saison 2011-2012) : la composition d'une équipe diffère suivant la saison. Dans ce cas, un Id_Saison d'une nouvelle table Saison, devra identifier un match et une composition d'équipe.

    Pas trop le temps de détailler, en ce moment.
    Dis-nous et à bientôt,
    Richard.
    ----------------------------------------------------------------------------------------------
    En cas de résolution, et afin de faciliter la tâche des bénévoles, merci de cliquer sur .
    et permettent aux forumeurs de cibler leur recherche dans une discussion : n'hésitez pas à voter !

  6. #6
    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
    Ces histoires de matches ont déjà été développeés plusieurs fois sur le forum. Il s'agissait plutôt de foot que de rugby mais le principe reste le même.

    Allez le Stade Toulousain ! Faites-nous le doublé Bouclier + Coupe d'Europe cette année !
    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 !

  7. #7
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2010
    Messages
    95
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2010
    Messages : 95
    Points : 76
    Points
    76
    Par défaut
    Bonjour !

    Une nouvelle fois j'aurais aimé avoir quelques petites précisions si possible :

    @CinePhil

    Je ferais plutôt ceci :
    equipe -0,n----disputer----2,2- match

    Ou encore ceci :
    equipe -0,n----recevoir----1,1- match
    |-----------0,n----se déplacer----1,1---|

    Ce qui doit donner les mêmes tables :
    equipe (eq_id, eq_nom...)
    match (mtc_id, mtc_id_equipe_receveuse, mtc_id_equipe_visiteuse, mtc_date...)
    Dans ce cas eq_id devrait être clé étrangère de la table match si je ne me trompe pas ? Donc comment est-il possible d'avoir les attributs mtc_id_equipe_receveuse, mtc_id_equipe_visiteuse dans la table Match ?

    Merci

  8. #8
    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
    Citation Envoyé par lightalex01 Voir le message
    Dans ce cas eq_id devrait être clé étrangère de la table match si je ne me trompe pas ? Donc comment est-il possible d'avoir les attributs mtc_id_equipe_receveuse, mtc_id_equipe_visiteuse dans la table Match ?
    Comme un match oppose deux équipes, le principe que certains prescrivent (mais que je n'applique jamais) qui veut que la clé étrangère porte le même nom que la clé primaire ne peut pas être appliqué ici car il ne peut y avoir deux colonnes portant le même nom dans la même table.
    Les colonnes mtc_id_equipe_receveuse, mtc_id_equipe_visiteuse font bien évidemment toutes deux référence à la clé primaire de la table equipe.

    D'ailleurs, pendant que j'y pense, il faudra imposer une contrainte pour que les deux clés étrangères n'aient pas la même valeur : une équipe ne peut pas jouer contre elle-même. Avec un bon SGBD, cela se fait avec une contrainte CHECK et avec le mauvais MySQL qui ne connaît toujours pas cette contrainte, il faut faire un TRIGGER ON INSERT et un TRIGGER ON DELETE plus une gestion du retour de l'erreur ; une usine à gaz pour un truc simple !
    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 !

  9. #9
    Expert confirmé Avatar de Richard_35
    Homme Profil pro
    Inscrit en
    Juillet 2007
    Messages
    3 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 3 121
    Points : 4 596
    Points
    4 596
    Par défaut
    Bonjour à tous,

    Ou bien :
    Equipe(Id_Equipe, Nom, ...) ;
    Match(Id_Match, Date, ...) ;
    Match_Equipe(#Id_Match, #Id_Equipe, Score, ...) ;
    ==> trigger interdisant des matchs de plus de deux équipes.
    Dis-nous et à bientôt,
    Richard.
    ----------------------------------------------------------------------------------------------
    En cas de résolution, et afin de faciliter la tâche des bénévoles, merci de cliquer sur .
    et permettent aux forumeurs de cibler leur recherche dans une discussion : n'hésitez pas à voter !

  10. #10
    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
    Je ne pense pas que ce soit plus optimisé !
    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 !

  11. #11
    Expert confirmé Avatar de Richard_35
    Homme Profil pro
    Inscrit en
    Juillet 2007
    Messages
    3 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 3 121
    Points : 4 596
    Points
    4 596
    Par défaut
    Citation Envoyé par CinePhil
    Je ne pense pas que ce soit plus optimisé !
    ==> c'est vrai : il s'agit juste d'une autre possibilité qui permet de n'avoir qu'un seul et même nom de champ pour les équipes receveuses et visiteuses.

    A Lightalex01 de faire son marché...
    Dis-nous et à bientôt,
    Richard.
    ----------------------------------------------------------------------------------------------
    En cas de résolution, et afin de faciliter la tâche des bénévoles, merci de cliquer sur .
    et permettent aux forumeurs de cibler leur recherche dans une discussion : n'hésitez pas à voter !

  12. #12
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2010
    Messages
    95
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2010
    Messages : 95
    Points : 76
    Points
    76
    Par défaut
    Bonjour à vous !

    Pour l'instant je me penche plus sur la réponse de @Cinephil qui propose deux clés étrangères liés toutes deux à l' id_équipe de la table Equipe :
    Les colonnes mtc_id_equipe_receveuse, mtc_id_equipe_visiteuse font bien évidemment toutes deux référence à la clé primaire de la table equipe.
    Cependant je ne vois pas comment il est possible de faire cela, à la fois lors de la modélisation du MLD (avec PowerAMC précisons), ainsi que lors de l'écriture du SQL pour la création de ma base.

    Merci en tout cas pour votre participation vous m'êtes d'un grand secourt !

    up :

    Désole j'ai trouver la réponse à mes questions moi-même mais merci bien !

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

Discussions similaires

  1. [MCD] Relation n-aire et partie de clef null
    Par wil4linux dans le forum Schéma
    Réponses: 2
    Dernier message: 27/09/2007, 10h09
  2. [MCD]relation entre tables comment faire?
    Par hicham28 dans le forum Modélisation
    Réponses: 8
    Dernier message: 10/04/2007, 21h32
  3. [MCD] Relation récursive
    Par storm_2000 dans le forum Schéma
    Réponses: 4
    Dernier message: 08/11/2006, 20h40
  4. [MCD]Relation Utilisateurs - Groupes - Fonction
    Par clarence dans le forum Schéma
    Réponses: 7
    Dernier message: 07/06/2006, 13h52
  5. Relation récursive pour exporter vers XML
    Par bossun dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 21/08/2005, 14h17

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