• 12 hours
  • Medium

Free online content available in this course.

course.header.alt.is_video

course.header.alt.is_certifying

Got it!

Last updated on 5/15/23

Identifiez les types d'associations entre vos tables

À 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 : 

Les tables Catalogue et Sommier sont association l'une à l'autre
Exemple d'association un-à-un

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 :

La table entity, ses lignes et ses colonnes
La table entity

Table address :

La table address, ses lignes et ses colonnes
La 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.

La table d'association réunit plusieurs tables ensemble par le biais de clés étrangères
Exemple de table 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 table  B  , on utilise une clé étrangère. La clé étrangère est placée dans  A et elle référence la clé primaire de  B  , 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.

Example of certificate of achievement
Example of certificate of achievement