Soient les tables temps et
villes définies dans le Chapitre 2, Le
langage SQL. Il s'agit maintenant de s'assurer que personne
n'insère de ligne dans la table temps qui ne corresponde à une entrée dans la
table villes. On appelle cela
maintenir l'intégrité référentielle
des données. Dans les systèmes de bases de données simplistes,
lorsqu'au moins c'est possible, cela est parfois obtenu par la
vérification préalable de l'existence d'un enregistrement
correspondant dans la table villes,
puis par l'insertion, ou l'interdiction, du nouvel
enregistrement dans temps. Puisque
cette approche, peu pratique, présente un certain nombre
d'inconvénients, PostgreSQL™
peut se charger du maintien de l'intégrité référentielle.
La nouvelle déclaration des tables ressemble alors à ceci :
CREATE TABLE villes (
ville varchar(80) primary key,
emplacement point
);
CREATE TABLE temps (
ville varchar(80) references villes,
t_haute int,
t_basse int,
prcp real,
date date
);
Lors d'une tentative d'insertion d'enregistrement non valide :
INSERT INTO temps VALUES ('Berkeley', 45, 53, 0.0, '1994-11-28');
ERROR: insert or update on table "temps" violates foreign key constraint "temps_ville_fkey"
DETAIL : Key (ville)=(a) is not present in table "villes".
Le comportement des clés étrangères peut être adapté très
finement à une application particulière. Ce tutoriel ne va pas
plus loin que cet exemple simple. De plus amples informations
sont accessibles dans le Chapitre 5,
Définition des données. Une utilisation efficiente des clés
étrangères améliore la qualité des applications accédant aux
bases de données. Il est donc fortement conseillé d'apprendre à
les utiliser.