Forum des développeurs  

Le forum de référence en programmation et développement. Articles, cours et tutoriels du débutant au chef de projet et DBA confirmé.
Précédent   Forum des développeurs > Hardware, Systèmes et Logiciels > Microsoft Office > Access > Conception

Conception Le forum qui vous aide à résoudre vos questions relatives à la modélisation de votre base de données sous Access.

Réponse
 
Outils de la discussion
Vieux 22/07/2008, 09h47   #1 (permalink)
Membre à l'essai
 
Date d'inscription: juin 2008
Messages: 44
Par défaut Relation plusieurs à plusieurs (clé)

Bonjour,

J'ai une relation plusieurs a plusieurs entre 2 tables A et B.
Je sais un peut comment fonctionne les relation plusieurs a plusieurs : il faut une table intermédiaire que j'appelle A_B. Actuellment mes tables intermédiaires n'ont pas de clés primaires (c'est ce qu'on m'a conseillé) mais...
Ma question est la suivante :
Si le même A peut être relié a un même B alors faut il une clé primaire dans ma table A_B pour les distinguer ?

merci d'avance
Cydonia
Cydonia est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 22/07/2008, 10h17   #2 (permalink)
Modérateur
 
Avatar de CinePhil
 
Date d'inscription: août 2006
Localisation: Toulouse
Âge: 45
Messages: 1 314
Envoyer un message via MSN à CinePhil
Par défaut

Chaque ligne d'une table doit être identifiable de manière unique.
Si tu as deux fois le couple (A,B), c'est un doublon et donc :
- Soit ton schéma présente une anomalie ;
- Soit le couple (A,B) n'est pas suffisant pour identifier la ligne de ta table.

Peut-être que l'association entre A et B est porteuse d'informations ?
Auquel cas une information supplémentaire permettra d'identifier de manière unique chaque couple (A,B) présent dans la table.

Un bémol sur ce que tu as écrit :
Citation:
Actuellment mes tables intermédiaires n'ont pas de clés primaires (c'est ce qu'on m'a conseillé)
Mauvais conseil ! D'ailleurs, puisque tu es sous Access, celui-ci te propose de créer une clé primaire si tu enregistres une table sans clé primaire.
La clé primaire d'une table associative est composée des clés primaires des tables entrant dans l'association.


Dans le cas qui te préoccupe, tu peux ajouter à cette clé primaire une information supplémentaire portée par l'association.

Un exemple pour mieux expliquer tout ça...

1) Le schéma
Employés -0,n----Participer----0,n- Projets

Ici, un employé peut participer à plusieurs projets et un projet peut avoir plusieurs participants employés.

Si je souhaite mémoriser chaque participation d'un employé à un même projet, je dois ajouter la date de participation dans la table associative et dans la clé primaire de cette dernière.

2) J'obtiens donc les tables :
Employés(EmpId, ...)
Projets(PrjId, ...)
EmpPrj([u]EPEmployé, EPProjet, EPDate[u], ...)

L'identifiant de la table associative EmpPrj est la clé primaire composée de l'identifiant de l'employé, de l'identifiant du projet et de la date de participation.
__________________
Philippe Leménager.
Futur ingénieur CNAM, en CDD à l'INRA Toulouse jusqu'au 31/12 suite au stage effectué.
Je reste ouvert aux propositions d'emploi.
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 22/07/2008, 11h21   #3 (permalink)
Membre à l'essai
 
Date d'inscription: juin 2008
Messages: 44
Par défaut

salut merci de ta réponse

quand tu dit
Citation:
2) J'obtiens donc les tables :
Employés(EmpId, ...)
Projets(PrjId, ...)
EmpPrj([u]EPEmployé, EPProjet, EPDate[u], ...)

L'identifiant de la table associative EmpPrj est la clé primaire composée de l'identifiant de l'employé, de l'identifiant du projet et de la date de participation.
on m'avait dit qu'il n'y avait pas besoin de signifier sous access que le couple était clé primaire et d'ailleurs je sais pas comment on fait

Ma table intermédiaire est une table créneau qui représente les créneaux horaire entre 2 table A et B cad qu'on peut avoir des cas similaires du style
imaginons que ma table soit ainsi
créneau {id_A,id_B,info1,info2}
On peut avoir toutes les combinaisons possibles
{id_A1,id_B1,info1X,info2Y}
{id_A1,id_B1,info1X,info2Z}
{id_A1,id_B2,info1X,info2Z}
{id_A2,id_b2,info1X,info2Y}
{id_A3,id_b3,info1R,info2S}

alors si on veut identifier les créneaux il faut garder les 4 champs comme clés ?
Cydonia est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 22/07/2008, 11h48   #4 (permalink)
Modérateur
 
Avatar de CinePhil
 
Date d'inscription: août 2006
Localisation: Toulouse
Âge: 45
Messages: 1 314
Envoyer un message via MSN à CinePhil
Par défaut

Citation:
Envoyé par Cydonia Voir le message
on m'avait dit qu'il n'y avait pas besoin de signifier sous access que le couple était clé primaire et d'ailleurs je sais pas comment on fait
Tu sélectionnes tous les champs composant la clé primaire puis tu clique sur la clé dans la barre d'outils (de mémoire).

Citation:
Ma table intermédiaire est une table créneau qui représente les créneaux horaire entre 2 table A et B cad qu'on peut avoir des cas similaires du style
imaginons que ma table soit ainsi
créneau {id_A,id_B,info1,info2}
On peut avoir toutes les combinaisons possibles
{id_A1,id_B1,info1X,info2Y}
{id_A1,id_B1,info1X,info2Z}
{id_A1,id_B2,info1X,info2Z}
{id_A2,id_b2,info1X,info2Y}
{id_A3,id_b3,info1R,info2S}

alors si on veut identifier les créneaux il faut garder les 4 champs comme clés ?
Un petit schéma tel que je l'ai fait serait plus explicite car là moi pas comprendre !
__________________
Philippe Leménager.
Futur ingénieur CNAM, en CDD à l'INRA Toulouse jusqu'au 31/12 suite au stage effectué.
Je reste ouvert aux propositions d'emploi.
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 22/07/2008, 12h19   #5 (permalink)
Membre à l'essai
 
Date d'inscription: juin 2008
Messages: 44
Par défaut

table A{id_a,...}
table B{id_b,...}
table Créneau{id_a,id_b,date,heure,..}

J'avais fait un jeu d'essai pour montrer que tous les cas sont possibles
Celà représente différents créneaux :
{id_a1,id_b1,dateX,heureY,...}
{id_a1,id_b1,dateX,heureZ,...}
{id_a1,id_b2,dateX,heureZ,...}
{id_a2,id_b2,dateX,heureY,...}
{id_a3,id_b3,dateR,heureT,...}

C'était juste pour montrer que les créneaux ne dépendent pas que de 2 valeurs :/

Citation:
Tu sélectionnes tous les champs composant la clé primaire puis tu clique sur la clé dans la barre d'outils (de mémoire).
ok merci mais je ne sais pas si c'est adapaté pour 4 champs :/
Cydonia est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 29/07/2008, 09h18   #6 (permalink)
Modérateur
 
Avatar de CinePhil
 
Date d'inscription: août 2006
Localisation: Toulouse
Âge: 45
Messages: 1 314
Envoyer un message via MSN à CinePhil
Par défaut

On voit bien dans ton exemple que le couple (id_a,id_b) n'est pas suffisant pour identifier les lignes de la table.

Tu peux donc utiliser la méthode décrite plus haut : intégrer la date et l'heure à la clé primaire de la table.
__________________
Philippe Leménager.
Futur ingénieur CNAM, en CDD à l'INRA Toulouse jusqu'au 31/12 suite au stage effectué.
Je reste ouvert aux propositions d'emploi.
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation
Réponse

Précédent   Forum des développeurs > Hardware, Systèmes et Logiciels > Microsoft Office > Access > Conception

 
Offres d' emploi informatique sur Lesjeudis.com


Outils de la discussion

Règles de messages
Vous ne pouvez pas créer de nouvelles discussions
Vous ne pouvez pas envoyer des réponses
Vous ne pouvez pas envoyer des pièces jointes
Vous ne pouvez pas modifier vos messages

Les balises BB sont activées : oui
Les smileys sont activés : oui
La balise [IMG] est activée : oui
Le code HTML peut être employé : non
Trackbacks are non
Pingbacks are non
Refbacks are non
Navigation rapide