À ce stade, vous savez qu’une clé étrangère sert à créer une association entre une table A et une table B. Voyons maintenant les 3 cas de figure dans lesquels on les utilise :
l'association un-à-un ;
l’association un-à-plusieurs ;
l’association plusieurs-à-plusieurs.
En fait, tout est question du nombre de lignes de A qui peuvent être associées aux lignes de B, et inversement !
Par exemple, prenons l’association entre les sommiers et les matelas. D’un côté, un sommier est associé à un matelas. De l’autre côté, un matelas est associé à un sommier. On est donc face à une association un-à-un.
L’association un-à-plusieurs se rencontre par exemple entre les sommiers et les pieds du lit : un sommier est associé à plusieurs pieds, et un pied est associé à un sommier.
Imaginons maintenant qu’un nouveau catalogue de literie soit édité tous les 2 ans. Un sommier peut être présent dans plusieurs catalogues, et un catalogue présente plusieurs sommiers. On est ici dans le cas plusieurs-à-plusieurs.
Implémentez une association un-à-un
Au chapitre précédent, vous avez lié les tables matelas
et sommier
en ajoutant une clé étrangère dans sommier
.
Mais vous auriez aussi pu faire l'inverse : mettre la clé étrangère dans matelas
, comme ceci :
Ici, on a cette liberté car il y a un matelas par sommier, et un sommier par matelas. On met donc la clé étrangère soit dans la table sommier, soit dans la table matelas. Nous sommes dans le cas d'une association un-à-un.
Implémentez une association un-à-plusieurs
Reprenons l'exemple du chapitre précédent : celui de l'association entre les tables entity
et address
. Ici, nous sommes dans un cas où une société ne peut avoir qu'une seule adresse maximum, mais une adresse peut accueillir plusieurs sociétés.
Nous sommes dans le cas d'une association un-à-plusieurs.
Dans ce cas, on utilise aussi une clé étrangère, comme vous l'avez vu précédemment :
Table entity :
Table address :
Vous voyez que les 2 premières lignes de entity
ont la même adresse (l'adresse numéro 132816168698714
).
Implémentez une association plusieurs-à-plusieurs
Passons maintenant au cas de l'association plusieurs-à-plusieurs. C'est quand une ligne d'une première table peut être associée à plusieurs lignes d'une seconde table, et qu'une ligne de cette seconde table peut être associée à plusieurs lignes de la première table.
Prenez un temps de réflexion avec l’exemple des sommiers et des catalogues : un catalogue contient plusieurs sommiers, et un sommier peut être présent dans plusieurs catalogues. Essayez de résoudre ce problème en plaçant une clé primaire dans l’une ou l’autre table. Dans tous les cas, vous allez vous retrouver bloqué, car si vous placez la clé étrangère dans sommier, alors un sommier ne sera associé qu’à un seul catalogue ! Et si vous placez la clé étrangère dans catalogue, un catalogue ne pourra contenir qu’un seul sommier…
La solution, c'est de déplacer le problème vers… une troisième table !
On l'appelle table d'association.
Comme vous le voyez, elle contient 2 clés étrangères, pointant chacune vers l'une des 2 tables d'origine. Ainsi, cette ligne de la table 1 peut être associée à plusieurs lignes de la table 2, et vice versa !
La clé primaire de cette table d'association est composée au moins des 2 clés étrangères.
Pourquoi au moins ?
Car il est possible de donner des caractéristiques supplémentaires à la table d'association, comme ici :
sommier [FK] | catalogue [FK] | pays | prix |
S40 | 100 | France | 180 € |
S40 | 100 | USA | 200 $ |
S40 | 101 | France | 170 € |
S40 | 101 | USA | 180 $ |
S57 | 101 | France | 250 € |
Ici, on a ajouté des caractéristiques aux associations entre sommiers et catalogues. On y voit que le sommier S40, dans le catalogue 2026-2027, est vendu 180 € en France, ou 200 $ aux États-Unis. Dans le catalogue 2028-2029, les prix ont baissé.
Ici, la clé primaire de cette table est composée de 3 colonnes : [sommier, catalogue, pays].
Dans la base de données des Panama Papers, nous avons un exemple de table d’association ayant une clé primaire avec une 3e colonne : c’est la table assoc_officer_entity
. Elle représente l’association plusieurs-à-plusieurs entre la table entity
et la table officer
. Sa clé primaire est (officer, entity, assoc_type). Cette dernière colonne donne le type d’association qui lie une personne présente dans officer
et une société de entity
. Par exemple, elle peut donner le président d’une société, ainsi que ses actionnaires. Ici, le groupe de colonnes (officer, entity) ne peut pas être à lui seul une clé primaire, car une même personne peut être à la fois présidente et actionnaire d’une société :
officer [PK] | entity [PK] | assoc_type [PK] | start_date | end_date |
M. Pédégé | Doumatelas Corp. | président | 01-01-2000 | 04-03-2014 |
M. Pédégé | Doumatelas Corp. | actionnaire | 01-04-2000 | null |
Mme Bigboss | Bonne nuit Ltd. | présidente | 01-01-2002 | 12-03-2010 |
En résumé
Pour une association un-à-un entre une table
A
et une tableB
, on utilise une clé étrangère. La clé étrangère est placée dansA
et elle référence la clé primaire deB
, ou bien l'inverse.Une association un-à-plusieurs se traduit en ajoutant une clé étrangère dans la table qui est du côté « plusieurs ». Cette clé étrangère référence la clé primaire de la table qui est du côté « un ».
Une association plusieurs-à-plusieurs se traduit en ajoutant une nouvelle table. La clé primaire de cette nouvelle table sera composée (au moins) des deux clés étrangères référençant les deux tables à associer.
Vous voici parvenu au bout de cette première partie. Je vous propose de tester vos connaissances dans le quiz suivant avant de vous attaquer à la seconde partie du cours.