FirebirdSQL logo
 DOMAININDEX 
Actions clés externes

Pour une intégrité des données supplémentaire, des options facultatives peuvent être spécifiées pour assurer la cohérence des données entre les tables parent et enfant selon les règles spécifiées :

  • La phrase ON UPDATE spécifie ce qui arrive aux entrées d’une sous table lorsque la valeur de la clé primaire/unique d’une ligne de la table parent est modifiée.

  • La clause ON DELETE spécifie ce qui arrive aux entrées de la sous table lorsque la ligne correspondante dans la table principale est supprimée.

Pour garantir l’intégrité référentielle d’une clé étrangère lorsque la valeur d’une clé primaire ou unique connexe est modifiée ou supprimée, les actions suivantes peuvent être effectuées :

  • NO ACTION (par défaut) — aucune action ne sera effectuée ;

  • CASCADE — Lorsqu’une valeur de clé primaire est modifiée ou supprimée, les mêmes actions seront effectuées sur la valeur de la clé étrangère. Lors de la suppression d’une ligne dans la table principale, tous les enregistrements ayant les mêmes valeurs de clé étrangère que la valeur de clé primaire (unique) de la ligne de la table principale supprimée doivent être supprimés dans la sous-table. Lors de la mise à jour d’un enregistrement de la table principale dans une table secondaire, toutes les valeurs de la clé étrangère ayant les mêmes valeurs que la valeur de la clé primaire (unique) de la ligne de la table principale qui est modifiée doivent être modifiées ;

  • SET DEFAULT — les valeurs des clés étrangères de toutes les lignes correspondantes dans la sous-table sont définies à la valeur par défaut spécifiée dans la clause DEFAULT pour cette colonne ;

  • SET NULL — les valeurs des clés étrangères de toutes les lignes correspondantes dans la sous table sont mises à NULL.

Example 1. Clé externe avec mise à jour en cascade et mise à NULL en cas de suppression
CONSTRAINT FK_ORDERS_CUST
FOREIGN KEY (CUSTOMER) REFERENCES CUSTOMERS (ID)
ON UPDATE CASCADE ON DELETE SET NULL

Contrainte CHECK

La contrainte CHECK spécifie la condition que les valeurs placées dans cette colonne doivent satisfaire.Une condition est une expression logique, également appelée prédicat, qui peut renvoyer les valeurs TRUE, FALSE, et UNKNOWN. La condition est satisfaite si le prédicat renvoie TRUE ou UNKNOWN (équivalent à NULL). Si le prédicat renvoie FALSE, la valeur ne sera pas acceptée.Cette condition est utilisée lors de l’ajout d’une nouvelle ligne à la table (l’opérateur INSERT) et lors du changement d’une valeur existante d’une colonne de la table (l’opérateur UPDATE) ainsi que les opérateurs dans lesquels une de ces actions peut se produire (UPDATE OR INSERT, MERGE).

Important

Lorsque vous utilisez la phrase CHECK pour une colonne basée sur un domaine, n’oubliez pas que l’expression dans CHECK ne fait que compléter une condition de vérification qui peut déjà être définie dans le domaine.

Au niveau de la colonne ou de la table, l’expression dans la phrase CHECK fait référence à la valeur entrante en utilisant les identifiants de colonne, contrairement aux domaines où la contrainte CHECK utilise le mot-clé VALUE à cette fin.

Example 1. Vérifier les limites des niveaux de colonnes et de tables
CREATE TABLE PLACES (
  ...
  LAT DECIMAL(9, 6) CHECK (ABS(LAT) <= 90),
  LON DECIMAL(9, 6) CHECK (ABS(LON) <= 180),
  ...
  CONSTRAINT CHK_POLES CHECK (ABS(LAT) < 90 OR LON = 0)
);