14/08/2023

3. Contraintes de vérification

Lu 286 fois Licence Creative Commons

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).