CodeGym /Cours /SQL SELF /Ajout de contraintes lors de la création de tables : NOT ...

Ajout de contraintes lors de la création de tables : NOT NULL, UNIQUE

SQL SELF
Niveau 17 , Leçon 1
Disponible

Il peut y avoir plein de données, mais elles ne sont pas toutes utiles. Pour éviter que ta table devienne une vraie poubelle, PostgreSQL te permet de poser des contraintes. C’est comme des petites règles pour que personne ne mette des chiffres dans le champ "nom" ou ne le laisse vide.

C’est quoi les constraints ?

Les contraintes (constraints) dans PostgreSQL, c’est un peu comme les règles de vie à l’armée. S’il n’y en a pas, tout le monde fait n’importe quoi : mettre l’âge d’un utilisateur à -999, ajouter une chaîne vide à la place du nom ou enregistrer deux fois le même étudiant sous des id différents. Pour éviter ça, PostgreSQL propose des mécanismes de contrôle qu’on appelle des contraintes.

Les contraintes te permettent de :

  1. Laisser tes données valides et cohérentes.
  2. Vérifier que les données respectent certaines règles (genre, l’âge d’une personne ne peut pas être négatif).
  3. Repérer plus vite les erreurs si les données ne sont pas comme tu t’y attends.

Aujourd’hui, on va voir les deux contraintes les plus courantes : NOT NULL et UNIQUE.

La contrainte NOT NULL

La contrainte NOT NULL dit à PostgreSQL : "Hey, ce champ doit toujours avoir une valeur. Pas de place pour l’incertitude ici !". Si tu essaies d’ajouter une ligne avec NULL dans ce champ, PostgreSQL va te balancer une erreur. C’est super utile pour les champs obligatoires, genre le nom ou la date de naissance d’un étudiant.

Exemple d’utilisation de NOT NULL

CREATE TABLE teachers (
    id SERIAL PRIMARY KEY,          -- Identifiant unique
    name VARCHAR(100) NOT NULL,     -- Nom de l’enseignant (obligatoire)
    subject VARCHAR(50) NOT NULL    -- Matière qu’il enseigne (obligatoire)
);

Dans cet exemple, les colonnes name et subject ne peuvent pas être vides. Si tu essaies d’insérer une ligne sans donner de valeur à ces colonnes, tu auras une erreur.

INSERT INTO teachers (name, subject)
VALUES (NULL, 'Mathématiques');

Résultat : erreur ! Tu n’as pas mis le nom de l’enseignant, et name exige une valeur.

La contrainte UNIQUE : il faut de l’unicité

La contrainte UNIQUE garantit que les valeurs dans une colonne ou une combinaison de colonnes ne se répètent pas. C’est pratique si tu veux, par exemple, t’assurer que deux étudiants n’ont pas le même numéro de carnet.

Si NOT NULL c’est comme "tout le monde doit être habillé à la soirée", alors UNIQUE c’est "personne n’a le droit d’avoir la même robe à la fête".

Exemple d’utilisation de UNIQUE

CREATE TABLE departments (
    id SERIAL PRIMARY KEY,      -- Identifiant unique
    name VARCHAR(100) UNIQUE    -- Le nom du département doit être unique
);

Maintenant, tu ne pourras pas ajouter deux départements avec le même nom.

INSERT INTO departments (name) VALUES ('Mathématiques');
INSERT INTO departments (name) VALUES ('Mathématiques');

Résultat : erreur ! Tu as essayé d’insérer une ligne avec une valeur dupliquée dans la colonne name.

Contrainte UNIQUE combinée

Tu peux aussi demander l’unicité sur une combinaison de deux (ou plusieurs) colonnes. Par exemple :

CREATE TABLE enrollments (
    id SERIAL PRIMARY KEY,          -- Identifiant unique pour l’enregistrement
    student_id INTEGER NOT NULL,    -- Identifiant de l’étudiant
    course_id INTEGER NOT NULL,     -- Identifiant du cours
    UNIQUE (student_id, course_id)  -- Un étudiant ne peut pas s’inscrire deux fois au même cours
);

Maintenant, chaque paire student_id et course_id doit être unique. Si quelqu’un essaie d’inscrire deux fois le même étudiant au même cours, PostgreSQL va bloquer.

Combiner les contraintes : NOT NULL et UNIQUE

Tu peux combiner NOT NULL et UNIQUE sur une même colonne. Par exemple :

CREATE TABLE users (
    username VARCHAR(50) NOT NULL UNIQUE, -- Login unique, obligatoire
    email VARCHAR(100) NOT NULL UNIQUE -- Adresse email unique, obligatoire
);

Ici, le login et l’adresse email doivent être uniques et ne peuvent pas être vides.

Erreurs courantes avec les contraintes

Si tu mets UNIQUE sur une colonne mais pas NOT NULL, tu peux insérer plusieurs lignes avec des valeurs NULL, car PostgreSQL considère que NULL n’est pas égal à un autre NULL. Si tu veux interdire les valeurs vides, ajoute NOT NULL.

Essayer d’ajouter une valeur dupliquée dans une colonne avec la contrainte UNIQUE va provoquer une erreur. Pense toujours à vérifier tes données avant de faire un INSERT.

Mettre trop de contraintes peut ralentir les opérations d’insertion.

Pourquoi tout ça ?

Utiliser des contraintes permet d’éviter plein de galères, comme les doublons, les champs vides et d’autres erreurs dues à l’humain. Ça rend ta base de données "auto-protégée", et sur des gros projets, ça fait gagner un temps fou. En entretien, on te demande souvent les contraintes, donc connaître NOT NULL et UNIQUE, c’est non seulement utile, mais ça peut aussi impressionner tes futurs boss.

Dans la prochaine leçon, on va voir la contrainte DEFAULT, qui permet de mettre des valeurs par défaut dans les colonnes si l’utilisateur ne précise rien. À bientôt !

Commentaires
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION