Contraintes de vérification
Les contraintes les plus génériques permettent d'effectuer des vérifications simples pour garantir la cohérence des données en établissant des règles.
Prennons en exemple une table de produits:
CREATE SEQUENCE seq_produit INCREMENT BY 1 MINVALUE 1 START 1;
CREATE TABLE produit (
id INT NOT NULL,
nom VARCHAR(255) NOT NULL,
prix INT NOT NULL,
date_creation DATE NOT NULL,
date_modification DATE DEFAULT NULL,
PRIMARY KEY (id)
);
Une règle logique serait que le prix
des produits doit être un entier positif. On peut alors déclarer une contrainte de vérification pour forcer cette règle:
ALTER TABLE produit ADD CONSTRAINT prix_positif CHECK (prix > 0);
L'enregistrement d'un produit avec un prix
à 0
va donc échouer:
INSERT INTO produit (id, nom, prix, date_creation)
VALUES (nextval('seq_produit'), 'Stylo', 0, '2022-09-16');
[23514] ERROR: new row for relation "produit" violates check constraint "prix_positif"
Detail: Failing row contains (1, Stylo, 0, 2022-09-16, null).
On peut également appliquer des règles plus complexes en lien avec plusieurs colonnes: s'assurer que la date de création est antérieure (ou égale) à la date de modification.
ALTER TABLE produit ADD CONSTRAINT chronologie CHECK (date_creation <= date_modification);
Puis test de la contrainte:
INSERT INTO produit (id, nom, prix, date_creation, date_modification)
VALUES (nextval('seq_produit'), 'Stylo', 5, '2022-09-16', '2021-12-15');
[23514] ERROR: new row for relation "produit" violates check constraint "chronologie"
Detail: Failing row contains (3, Stylo, 5, 2022-09-16, 2021-12-15).