Documentation PostgreSQL 14.22 » Tutoriel » Fonctionnalités avancées » Clés étrangères

Précédent | Niveau supérieur | Suivant
3.2. Vues | Sommaire | 3.4. Transactions

## 3.3. Clés étrangères

Soit les tables `temps` et `villes` définies dans le Chapitre 2. 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, lorsque 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 (
    	nom       varchar(80) primary key,
    	emplacement point
    );

    CREATE TABLE temps (
    	ville      varchar(80) references villes(nom),
    	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. Une utilisation efficace 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.