SQL ET POSTGRE 3.5 : Les contraintes unique not null et check
Dans cette leçon, nous examinons trois contraintes très utiles que PostgreSQL permet d'appliquer à une colonne lors de la création d'une table : UNIQUE, NOT NULL et CHECK. Chacune répond à un besoin métier différent et permet d'éviter d'insérer en base des données invalides.
UNIQUE, NOT NULL et CHECK en pratique
La contrainte UNIQUE garantit qu'aucune valeur ne se répète dans une colonne. Si une valeur déjà existante tente d'être insérée, PostgreSQL refuse l'opération et lève une erreur. Cas typique : la colonne email dans une table d'utilisateurs — chaque adresse doit être unique. À noter que la clé primaire impose automatiquement cette contrainte. Les autres colonnes comme prenom ou ville ne devraient pas l'avoir, puisque deux personnes peuvent partager ces valeurs.
La contrainte NOT NULL oblige chaque ligne à contenir une valeur pour la colonne concernée — autrement dit, ce champ devient obligatoire à l'insertion. C'est utile pour les données essentielles : un email ou un nom de famille ne doivent pas pouvoir être vides. Une clé primaire est, par défaut, NOT NULL. Pour bien visualiser ce qu'est un champ NULL, imaginez un Monsieur Toto qui n'a pas voulu renseigner son prénom, ou un Monsieur Koti dont l'âge est inconnu : ce sont des cellules sans valeur. Ajouter NOT NULL sur certaines colonnes empêche ce vide.
La contrainte CHECK vérifie qu'une valeur respecte une expression booléenne. Par exemple, on peut imposer qu'un âge soit supérieur à 0, ou qu'une note de recette soit comprise entre 1 et 5. Pour notre table animaux : CHECK (age > 0) garantit qu'aucun âge négatif ou nul n'est inséré, ce qui n'aurait évidemment aucun sens. Ces trois contraintes constituent les garde-fous fondamentaux qui vous permettront de bâtir des tables robustes. Rendez-vous dans la prochaine vidéo pour créer notre première table en pratique.
En résumé
Cette leçon couvre les trois contraintes de table essentielles en SQL et PostgreSQL : UNIQUE garantit l'unicité des valeurs dans une colonne (pas de doublons), NOT NULL assure qu'une colonne ne peut jamais être vide (données obligatoires), et CHECK vérifie que les valeurs satisfont une condition booléenne spécifique. Ces contraintes s'appliquent au niveau colonne lors de la création de la table et protègent l'intégrité des données en base de données en rejetant les insertions invalides.
Points clés
- La contrainte UNIQUE empêche les doublons dans une colonne (exemple : email, numéro d'identification)
- La contrainte NOT NULL rend un champ obligatoire lors de l'insertion de données
- La contrainte CHECK valide que les valeurs respectent une condition logique (exemple : age > 0, note entre 1 et 5)
- Ces trois contraintes se définissent lors de la création de la table avec CREATE TABLE
- NOT NULL s'applique automatiquement sur les colonnes de clé primaire
- Les contraintes améliorent la qualité des données en rejetant automatiquement les insertions invalides
Questions fréquentes
Quelle est la différence entre UNIQUE et NOT NULL ?
UNIQUE empêche les doublons mais accepte les valeurs nulles (vides), tandis que NOT NULL interdit les valeurs nulles mais accepte les doublons (sauf si UNIQUE est aussi appliqué).
Comment utiliser la contrainte CHECK sur une colonne âge ?
Lors de la création de la table, on ajoute CHECK (age > 0) pour la colonne âge, ce qui refuse toute valeur négative ou zéro lors de l'insertion ou de la modification.
Peut-on appliquer plusieurs contraintes à la même colonne ?
Oui, on peut combiner plusieurs contraintes sur une colonne, par exemple UNIQUE, NOT NULL et CHECK ensemble pour assurer à la fois l'unicité, l'obligation du champ et la validité des données.