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
colonne TYPE NOT NULLcolonne TYPE UNIQUECHECK (condition)FOREIGN KEY (colonne) REFERENCES table (colonne) ON DELETE { RESTRICT | CASCADE | SET NULL }Exemple
-- 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
- 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.
- 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.
- 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.
- 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
- Clé étrangère (FK)Une clé étrangère est une colonne qui reprend la clé primaire d'une autre table pour matérialiser un lien du MCD. Le SGBD vérifie alors que la ligne référencée existe bien.
- MLD → MPD (SQL)Le MPD traduit le MLD en ordres CREATE TABLE pour un SGBD précis, avec les types de colonnes, les contraintes et les index. C'est à ce niveau que le modèle devient une base qui fonctionne.
- Cardinalités (1,1) — (1,1) et (0,1) — (1,1)Les associations un-à-un sont rares. En (0,1)–(1,1), la clé étrangère va du côté (1,1), avec UNIQUE NOT NULL ; en (1,1)–(1,1), on fusionne le plus souvent les deux entités en une table.
- Clé naturelle ou clé techniqueUne clé naturelle vient du métier (ISBN, code pays) ; une clé technique est un numéro sans signification attribué par le système. Le bon choix dépend de la stabilité de la donnée.