Précédent   Forum des professionnels en informatique > Général Développement > Conception > Modélisation > Schéma
Schéma Modélisation Relationnelle (Dépendances Fonctionnelles, Formes Normales, Entité-relation, MCD, MPD ...)
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 14/01/2012, 11h10   #1
Membre à l'essai
 
Homme Alexandre
Étudiant
Inscription : décembre 2010
Messages : 44
Détails du profil
Informations personnelles :
Nom : Homme Alexandre
Âge : 20
Localisation : France

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

Informations forums :
Inscription : décembre 2010
Messages : 44
Points : 24
Points : 24
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 !
lightalex01 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/01/2012, 19h04   #2
Expert Confirmé
 
Avatar de Richard_35
 
Homme
Inscription : juillet 2007
Messages : 2 184
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Ille et Vilaine (Bretagne)

Informations forums :
Inscription : juillet 2007
Messages : 2 184
Points : 2 814
Points : 2 814
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 :
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 !
Richard_35 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 14/01/2012, 20h50   #3
Membre à l'essai
 
Homme Alexandre
Étudiant
Inscription : décembre 2010
Messages : 44
Détails du profil
Informations personnelles :
Nom : Homme Alexandre
Âge : 20
Localisation : France

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

Informations forums :
Inscription : décembre 2010
Messages : 44
Points : 24
Points : 24
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 !
lightalex01 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/01/2012, 14h49   #4
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 11 029
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
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 : 11 029
Points : 18 331
Points : 18 331
Envoyer un message via MSN à CinePhil
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).

Citation:
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 de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« 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 Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 20
Vieux 16/01/2012, 15h56   #5
Expert Confirmé
 
Avatar de Richard_35
 
Homme
Inscription : juillet 2007
Messages : 2 184
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Ille et Vilaine (Bretagne)

Informations forums :
Inscription : juillet 2007
Messages : 2 184
Points : 2 814
Points : 2 814
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 !
Richard_35 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 16/01/2012, 16h19   #6
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 11 029
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
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 : 11 029
Points : 18 331
Points : 18 331
Envoyer un message via MSN à CinePhil
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 de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« 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 Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/01/2012, 11h05   #7
Membre à l'essai
 
Homme Alexandre
Étudiant
Inscription : décembre 2010
Messages : 44
Détails du profil
Informations personnelles :
Nom : Homme Alexandre
Âge : 20
Localisation : France

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

Informations forums :
Inscription : décembre 2010
Messages : 44
Points : 24
Points : 24
Bonjour !

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

@CinePhil

Citation:
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
lightalex01 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/01/2012, 12h00   #8
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 11 029
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
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 : 11 029
Points : 18 331
Points : 18 331
Envoyer un message via MSN à CinePhil
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 de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« 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 Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/01/2012, 12h08   #9
Expert Confirmé
 
Avatar de Richard_35
 
Homme
Inscription : juillet 2007
Messages : 2 184
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Ille et Vilaine (Bretagne)

Informations forums :
Inscription : juillet 2007
Messages : 2 184
Points : 2 814
Points : 2 814
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 !
Richard_35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/01/2012, 14h23   #10
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 11 029
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
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 : 11 029
Points : 18 331
Points : 18 331
Envoyer un message via MSN à CinePhil
Je ne pense pas que ce soit plus optimisé !
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« 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 Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/01/2012, 14h33   #11
Expert Confirmé
 
Avatar de Richard_35
 
Homme
Inscription : juillet 2007
Messages : 2 184
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Ille et Vilaine (Bretagne)

Informations forums :
Inscription : juillet 2007
Messages : 2 184
Points : 2 814
Points : 2 814
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 !
Richard_35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/01/2012, 12h14   #12
Membre à l'essai
 
Homme Alexandre
Étudiant
Inscription : décembre 2010
Messages : 44
Détails du profil
Informations personnelles :
Nom : Homme Alexandre
Âge : 20
Localisation : France

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

Informations forums :
Inscription : décembre 2010
Messages : 44
Points : 24
Points : 24
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 :
Citation:
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 !
lightalex01 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 23h27.


 
 
 
 
Partenaires

Hébergement Web