Celui qui conçoit un système de gestion de base de données SQL a tout intérêt à connaître et à mettre en œuvre le système des clés étrangères. Sur le long terme, il sera largement gagnant.
Une clé étrangère est une colonne (ou plusieurs colonnes) d’une base de données qui est reliée à la colonne clé primaire d’une autre table. La clé primaire en question est un simple identifiant. L’information utile – et susceptible d’évoluer – figure dans la table externe.
Quelle utilité pour une clé étrangère ?
Imaginons, vous gérez une table Articles dans laquelle figure une colonne appelée Catégorie. Pour chaque article, cette catégorie doit être remplie individuellement.
À titre d’exemple, nous pourrions avoir parmi les catégories « Produit métallique ». Or, du jour au lendemain, la législation change et désormais, cette catégorie devient « Produit à base de métaux ».
Que faire ? Va-t-il falloir modifier toutes les lignes dans lesquelles figure la catégorie « Produit métallique » ? Hélas oui. Si la table Articles s’étend sur des dizaines de milliers d’entrées, la procédure va être pour le moins fastidieuse.
C’est afin d’éviter ce genre de situations que la notion de clé étrangère a été définie. Ainsi, dans le cas évoqué juste au-dessus, l’idée va consister à créer une table séparée, appelée Catégorie, dans laquelle nous aurons comme clé primaire, un identifiant (un n° pour chaque catégorie) associé à la description correspondante.
À partir de là, dans la table Articles, il suffira d’indiquer, pour chaque produit proposé au catalogue, l’identifiant correspondant de la table Catégories. Il sera ensuite possible d’imprimer la liste de chaque article tout en faisant apparaître (grâce à une jointure) la catégorie correspondante.
Ainsi donc, comme nous pouvons le voir, la situation de la catégorie qui change de nom est ici résolue.
Table parente et table fille
On parle de « table parente » pour celle référencée par une autre table. Ce serait ici le cas de la table Catégories.
Et l’on parle de « table fille » pour qui fait référence à une table externe – ce qui serait ici le cas de la table Articles.
Un exemple pratique
Voici un autre exemple d’usage d’une clé étrangère dans un cas de figure plus explicite.
Table CLIENTS
Id_Client | Nom |
Prénom |
Âge |
---|---|---|---|
1 | Martin |
Germaine |
32 |
2 |
Culprit |
Thomas |
22 |
3 |
Albanez |
Francis |
40 |
4 |
De Jonquière |
Martine |
33 |
CLIENTS est ici la table « parente ». Si le client n°4, Martine de Jonquière venait à divorcer et reprenait demain son nom de jeune fille (Heras), il suffirait de modifier cette information dans la table « parente ».
Table COMMANDES
Id_Commande |
Date_Commande |
Id_Client |
---|---|---|
1 |
11/04/2023 |
4 |
2 |
10/05/2023 |
3 |
3 |
12/05/2023 |
4 |
4 |
26/05/2023 |
4 |
5 |
16/06/2023 |
1 |
Dans cet exemple, nous retrouvons la colonne « Id_Client » dans la table COMMANDES (qui est la table « fille »). Elle pointe vers la colonne « Id_Client » de la table CLIENTS. Ainsi, nous pourrions savoir ici au moyen d’une jointure que Martine de Jonquières a passé trois fois commandes : une fois en avril et deux fois en juin.
Dans la table CLIENTS, la colonne Id_Client est la clé primaire.
Dans la table COMMANDES, la colonne Id_Client est la clé étrangère.
Avantages des clés étrangères
Intégrité référentielle
Le principal avantage lié à l’usage des clés étrangères est l’intégrité référentielle : aucune ligne de la table fille ne sera complète et valide tant qu’il n’existe pas un enregistrement correspondant dans la table parent.
Cohérence des informations
Toutes les tables qui font référence à la clé étrangère sont assurées de pouvoir produire des données cohérentes et à jour. Pour mémoire, si Martine de Jonquières change de nom, ce changement sera visible à partir de toutes les tables faisant référence à son identifiant.
Inconvénients des clés étrangères
Vitesse de traitement amoindrie
Bien évidemment, la clé étrangère va impliquer un temps de traitement informatique plus long. Chaque fois que l’on insère une nouvelle ligne dans une table telle que COMMANDES, il va être nécessaire de vérifier si l’identifiant client correspondant existe bel et bien dans la table CLIENTS.
Complexité
Un usage recommandé
En dépit des quelques inconvénients que leur usage peut soulever, l’usage des clés étrangères est fortement recommandé pour celui qui a pour charge de concevoir des systèmes de gestion bases de données SQL. Sur le long terme, il sera largement gagnant. Pour faire simple, nous pourrions dire qu’il importe d’utiliser le système des clés étrangères chaque fois que nous avons affaire à un type de données susceptible d’évoluer dans le temps. Les exemples abordés ici illustrent clairement ce qui pourra être gagné. Et donc, il est crucial de définir les clés étrangères dès la conception même d’une base de données SQL.