Comment définir une relation Plusieurs à Plusieurs dans Access ?

Solution

Il est impossible de lier directement 2 tables par une relation de Plusieurs à Plusieurs. Il faut systématiquement passer par une troisième table.

On suppose que vous avez déjà 2 tables construites correctement (notamment avec une clef primaire chacune). Dans ce cas :

  1. Créez une troisième table, qu'on appellera "table de jonction".
  2. Dans cette table, reprenez la clef primaire des tables 1 et 2.
  3. La clef primaire de la table 3 sera au minimum la combinaison des 2 autres clefs.
  4. Dans la fenêtre Relations, tracez maintenant une relation classique "1 à Plusieurs" entre les tables 1 et 3, et faites de même entre les tables 2 et 3. 

Exemple

Dans l'exemple suivant...
  • un réalisateur peut tourner plusieurs films
  • un film peut être tourné par plusieurs réalisateurs.
    C'est plus rare, mais ça se fait ! Matrix est tourné par les frères Wachowski, par exemple...
Donc on se retrouve bien avec une relation "Plusieurs à Plusieurs".
  1. Créez donc la table intermédiaire (vous lui donnez un nom quelconque, meilleur que le mien :-))
  2. Ajoutez à cette table un champ Numéro Film qui permettra la liaison avec [tbl Films].[Numéro Film].
    Pris individuellement, ce champ n'est pas clef primaire (on pourrait le penser en voyant le symbole de clef) : il s'agit juste ici d'un champ Numérique/Entier long, indexé avec doublons. En d'autres termes, il s'agit d'une clef étrangère.
  3. Créez un champ Numéro Réalisateur qui permettra la liaison avec [tbl Réalisateurs].[Numéro Réalisateur].
    Comme précédemment, ce champ n'est pas clef primaire individuellement : il s'agit juste ici d'un champ Numérique/Entier long, indexé avec doublons.
  4. Par contre, la clef primaire de la table de jonction est composée des 2 champs Numéro Film et Numéro Réalisateur (d'où la double clef).



Notes
  • Dans l'exemple plus haut, la table de jonction ne contient que 2 champs (les clefs étrangères). Mais elle peut contenir d'autres informations, si nécessaire.
  • Dans certains cas, il ne suffit pas de joindre les 2 clefs étrangères (dans la table de jonction) pour en faire une clef primaire. Parce que la saisie serait trop restrictive. Dans ce cas, la table de jonction comporte généralement d'autres champs, et vous pouvez en inclure un 3ème, voire un 4ème dans la clef primaire. Rappelez-vous qu'il a été dit plus haut que "la clef primaire de la table 3 est au minimum la combinaison des 2 autres clefs". Au minimum.
  • Si on poursuit ce raisonnement, vous risquez parfois d'avoir une clef primaire composée de plein de champs, ce qui peut être lourd à gérer. Vous pouvez alors la remplacer par une clef primaire mono-champ (le champ étant de type NuméroAuto). Mais il serait bon que la combinaison des autres champs reste indexée sans doublons.