Qu'est-ce qu'une clé étrangère ?
Au chapitre précédent, vous avez vu comment identifier les lignes de vos tables.
Mais votre base ne contient pas qu'une table, et il arrive que 2 tables contiennent des informations qui sont liées entre elles.
Par exemple, votre table sommier
est en lien avec la table matelas
, car chaque sommier est associé au matelas avec lequel il sera assemblé !
Pour lier des tables entre elles, on a créé le concept de clé étrangère.
Voici ce que cela donne pour les tables sommier
et matelas
:
Vous voyez qu'il y a une colonne dans sommier
qui contient des identifiants de matelas. C'est comme cela que l'on sait que le sommier S40 va être assemblé avec le matelas M1.
Ici, la clé étrangère n'est composée que d'une colonne ( matelas_fk
), car la clé primaire de la table matelas
ne contient qu'une colonne ( id_matelas
). Mais si la clé primaire contient deux colonnes, alors il faut une clé étrangère à deux colonnes !
À vous de jouer
Contexte
Vous commencez à vous familiariser avec votre base de données des Panama Papers. Vous y voyez 2 tables qui semblent être liées : la table entity
et la table address
. Si elles sont liées, il y a probablement une clé étrangère quelque part. La repérer vous aidera ensuite à chercher plus efficacement et de manière plus cohérente dans vos données.
Consignes
Repérez la clé étrangère, déterminez de combien de colonnes elle est composée, et trouvez la clé primaire qu'elle référence :
Table entity :
Table address :
Vérifiez votre travail
La clé étrangère est composée d'une seule colonne : id_address
de la table entity
. Elle référence la clé primaire de address
, qui est la colonne id_address
. En effet, les valeurs dans la colonne entity.id_address
semblent être des identifiants. Ces identifiants se retrouvent dans la colonne address.id_address
. Vu le nom de cette colonne (“id_address”), il est très probable qu'elle soit la clé primaire artificielle de la table address.
Créez du lien entre vos tables
Maintenant que vous savez reconnaître une clé étrangère, on va voir comment implémenter ce concept en SQL.
Vous avez déjà vu le code permettant de créer la table entity. Mais la clé étrangère n'était pas indiquée. Pour spécifier la clé étrangère entre entity
et address
, il faut ajouter ce bout de code lors de la création de la table entity
:
FOREIGN KEY ( <colonnes clés étrangères> ) REFERENCES <table référencée> ( <clé primaire de la table référencée> )
Ce qui donne :
CREATE TABLE entity2 (
id INTEGER,
name TEXT NOT NULL,
jurisdiction TEXT,
jurisdiction_description TEXT,
incorporation_date DATE,
status TEXT,
service_provider TEXT,
id_address INTEGER,
source TEXT,
note TEXT,
end_date DATE,
url TEXT,
lifetime INTEGER,
PRIMARY KEY(id),
FOREIGN KEY (id_address) REFERENCES address (id_address)
)
Supprimez ensuite entity2
avec DROP TABLE entity2
.
En résumé
Une clé étrangère est un groupe de colonnes d'une table, qui fait référence à la clé primaire d'une autre table, afin de modéliser le lien entre les lignes de ces deux tables.
Une clé étrangère peut être composée d'une ou plusieurs colonnes.
Une clé étrangère se dit en anglais foreign key (FK).
En SQL, une clé étrangère peut se définir lors de la création de la table, en écrivant
FOREIGN KEY ( <colonnes clés étrangères> ) REFERENCES <table référencée> ( <clé primaire de la table référencée> )
Maintenant que vous savez utiliser les clés étrangères, nous allons voir dans le prochain chapitre comment identifier les différents types d'associations entre vos tables.