Aller au contenu
Vers le MPD

Contraintes d'intégrité

NOT NULL, UNIQUE, CHECK et les clés étrangères traduisent les règles de gestion dans le SGBD, qui refuse alors les données incohérentes quelle que soit l'application qui les écrit.

  • NOT NULL
  • UNIQUE
  • CHECK
  • ON DELETE
  • règle de gestion

Syntaxe

Modèle
colonne TYPE NOT NULLcolonne TYPE UNIQUECHECK (condition)FOREIGN KEY (colonne) REFERENCES table (colonne)  ON DELETE { RESTRICT | CASCADE | SET NULL }

Exemple

Exemple concret
-- RG : une commande a un client (1,1) ; e-mail unique ;-- quantité > 0 ; une ligne disparaît avec sa commande.PRAGMA foreign_keys = ON;CREATE TABLE client (  num_client INTEGER PRIMARY KEY,  email      TEXT NOT NULL UNIQUE);CREATE TABLE produit (  ref_produit TEXT PRIMARY KEY,  libelle     TEXT NOT NULL);CREATE TABLE commande (  num_commande  INTEGER PRIMARY KEY,  date_commande TEXT NOT NULL,  num_client    INTEGER NOT NULL    REFERENCES client (num_client) ON DELETE RESTRICT);CREATE TABLE contenir (  num_commande INTEGER REFERENCES commande (num_commande) ON DELETE CASCADE,  ref_produit  TEXT REFERENCES produit (ref_produit),  quantite     INTEGER NOT NULL CHECK (quantite > 0),  PRIMARY KEY (num_commande, ref_produit));INSERT INTO client VALUES (1, 'lea@exemple.fr');INSERT INTO produit VALUES ('P042', 'Clavier sans fil');INSERT INTO commande VALUES (10, '2026-10-03', 1);INSERT INTO contenir VALUES (10, 'P042', 0);-- Erreur : CHECK constraint failed: quantite > 0DELETE FROM client WHERE num_client = 1;-- Erreur : FOREIGN KEY constraint failed

À retenir

  1. Partez des règles de gestion : un (1,1) donne une clé étrangère NOT NULL, « e-mail propre à chaque client » donne UNIQUE, « quantité positive » donne CHECK.
  2. Choisissez ON DELETE d'après le métier : CASCADE pour une dépendance forte (lignes d'une commande), RESTRICT quand la suppression doit être refusée (client qui a des commandes), SET NULL pour un lien optionnel.
  3. Une contrainte en base protège contre toutes les sources d'écriture (application, import, script) ; un contrôle placé seulement dans le formulaire ne protège que le formulaire.
  4. Piège : dans SQLite, les clés étrangères ne sont vérifiées qu'après PRAGMA foreign_keys = ON, à exécuter à chaque connexion. Sans lui, la suppression du client 1 passerait sans erreur.

Voir aussi