Création d'une clef étrangère avec PgAdmin

Il est possible de définir une clef étrangère (importation d'une clef primaire d'une autre table).

Lorsque les données des colonnes référencées sont modifiées, des actions sont réalisées sur les données de la table référençant :

  • La clause ON DELETE (onglet action → lors d'une suppression) spécifie l'action à réaliser lorsqu'une ligne référencée de la table de référence est supprimée.

  • De la même façon, la clause ON UPDATE (lors d'une mise à jour) spécifie l'action à réaliser lorsqu'une colonne référencée est mise à jour.

  • Si la ligne est mise à jour sans que la valeur de la colonne référencée ne soit modifiée, aucune action n'est réalisée.

Les actions suivantes sont possibles pour chaque clause (voir CREATE TABLE) :

NO ACTION

Une erreur est produite pour indiquer que la suppression ou la mise à jour entraîne une violation de la contrainte de clé étrangère. C'est le comportement par défaut.

RESTRICT

Une erreur est produite pour indiquer que la suppression ou la mise à jour entraîne une violation de la contrainte de clé étrangère. Ce comportement est identique à NO ACTION, si ce n'est que la vérification n'est pas décalable dans le temps.

CASCADE

La mise à jour ou la suppression de la ligne de référence est propagée à l'ensemble des lignes qui la référencent, qui sont, respectivement, mises à jour ou supprimées.

SET NULL

La valeur de la colonne qui référence est positionnée à NULL.

SET DEFAULT

La valeur de la colonne qui référence est positionnée à celle par défaut.

Si les colonnes référencées sont modifiées fréquemment, il est conseillé d'ajouter un index sur la colonne de clé étrangère de façon à accélérer les actions référentielles associées à la colonne de clé étrangère.

ComplémentConvention de nommage

Il est bon d'adopter une convention de nommage, par exemple :

  • clef primaire : pk_nom_champ_nom_de_la_table (pk pour primary key), la clef primaire est souvent un champ nommé id.

  • clef étrangère : fk_nom_champ_nom_table (fk pour foreign key)