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 son
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
);
Que se passe-t-il lors d'une tentative d'insertion d'enregistrement
non valide :
INSERT INTO temps VALUES ('Berkeley', 45, 53, 0.0, '1994-11-28');
ERREUR: Une instruction insert ou update sur la table «temps» viole la contrainte de clé étrangère «temps_ville_fkey»
DETAIL: La clé (ville)=(Berkeley) n'est pas présente dans la table «villes».
Le comportement des clés secondaires peut être ajusté très finement
pour une application. 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 à bon escient des clés
secondaires améliore la qualité des applications accédant aux bases
de données. Il est donc fortement conseillé d'apprendre à les
utiliser.