Documentation PostgreSQL 8.1.23 > Tutoriel > Fonctionnalités avancées > Clés étrangères | |
Vues | Transactions |
Souvenez-vous des tables temps et villes du Chapitre 2, Le langage SQL. Considérez le problème suivant : vous voulez vous assurer que personne n'insère de lignes dans la table temps qui ne correspondraient pas à une entrée dans la table villes. Ceci maintient l'intégrité référentielle de vos données. Dans les systèmes de bases de données simples, ceci serait implémenté (si possible) en vérifiant en premier lieu que la table villes dispose bien d'un enregistrement correspondant, puis en insérant ou en empêchant l'insertion du nouvel enregistrement dans temps. Cette approche présente un certain nombre de problèmes et n'est pas très pratique, donc PostgreSQL™ peut s'en charger pour vous.
La nouvelle déclaration des tables ressemblerait à 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 );
Maintenant, essayons d'insérer un 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)=(Berkeley) is not present in table "villes".
Le comportement des clés secondaires peut être précisé très finement pour votre application. Nous n'irons pas plus loin que cet exemple simple dans ce tutoriel mais référez-vous simplement au Chapitre 5, Définition des données pour plus d'informations. Utiliser correctement les clés secondaires améliore la qualité de vos applications de bases de données, donc vous êtes fortement encouragé à les connaître.