0Pricing
SQL Interview Prep · Leçon

Normalisation jusqu’à la 3NF

Première, deuxième et troisième formes normales, avec les anomalies qu’elles éliminent

Normalisation jusqu’à la 3NF est une leçon SQL Interview Prep gratuite sur CoddyKit. Ceci est la leçon 1 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage SQL Interview Prep, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours SQL Interview Prep comprend 4 leçons au total.

Pourquoi les recruteurs posent des questions sur la normalisation

La normalisation est un principe fondamental de la modélisation des bases de données, et les recruteurs l'utilisent pour vérifier que vous comprenez l'intégrité des données au niveau de la conception. La question est souvent formulée ainsi : « Qu'est-ce que la normalisation et pourquoi est-elle importante ? »

La normalisation est le processus d'organisation des colonnes et des tables afin de réduire la redondance et d'éviter les anomalies de mise à jour, d'insertion et de suppression. Chaque forme normale (1NF, 2NF, 3NF) ajoute une règle plus stricte.

Une réponse solide cite les anomalies que la normalisation élimine, et pas seulement les définitions des manuels.

Les trois anomalies

Avant d'étudier les formes normales, apprenez à connaître les problèmes qu'elles résolvent. Une table mal conçue qui stocke tout au même endroit présente trois anomalies :

  • Anomalie de mise à jour : la même information est stockée dans de nombreuses lignes ; une modification doit donc toutes les toucher, faute de quoi les données deviennent incohérentes.
  • Anomalie d'insertion : vous ne pouvez pas ajouter une information sans fournir également des données sans rapport avec elle (par exemple, impossible d'ajouter un produit sans commande).
  • Anomalie de suppression : la suppression d'une ligne efface accidentellement une autre information indépendante.

Si vous savez repérer ces anomalies dans un exemple de table, vous pouvez justifier chaque étape de la normalisation.

Une table de départ non normalisée

Voici un exemple classique d'entretien : une table très large qui mélange commandes, clients et produits. Remarquez la répétition de l'adresse e-mail du client et du prix du produit sur plusieurs lignes. C'est là que se trouvent les anomalies.

Votre objectif pendant l'entretien est de faire évoluer cette table jusqu'à la 3NF, en expliquant chaque séparation.

-- Unnormalized: everything in one table
CREATE TABLE orders_flat (
  order_id     INT,
  customer_id  INT,
  customer_email VARCHAR(255),
  product_id   INT,
  product_name VARCHAR(100),
  unit_price   DECIMAL(10,2),
  quantity     INT
);

Première forme normale (1NF)

1NF exige que chaque colonne contienne une seule valeur atomique et qu'il n'y ait ni groupes répétitifs ni tableaux à l'intérieur d'une cellule.

Une table ne respecte pas la 1NF si une colonne contient une liste séparée par des virgules comme 'phone1, phone2' ou si vous avez des colonnes product1, product2, product3.

La solution consiste à attribuer à chaque valeur sa propre ligne. Le recruteur veut vous entendre dire : « des valeurs atomiques, aucun groupe répétitif et une clé qui identifie chaque ligne ».

-- Violates 1NF: a list inside one column
-- phones = '555-1111, 555-2222'

-- 1NF fix: one phone per row
CREATE TABLE customer_phone (
  customer_id INT,
  phone       VARCHAR(20),
  PRIMARY KEY (customer_id, phone)
);

Dépendances fonctionnelles

Pour expliquer la 2NF et la 3NF, vous devez employer le terme dépendance fonctionnelle. Nous écrivons A -> B pour signifier « A détermine B » : pour chaque valeur de A, il existe exactement une valeur de B.

Dans notre table des commandes :

  • customer_id -> customer_email
  • product_id -> product_name, unit_price
  • order_id, product_id -> quantity

La normalisation consiste essentiellement à s'assurer que chaque colonne qui n'est pas une clé dépend de la clé entière, et de rien d'autre que la clé.

Deuxième forme normale (2NF)

2NF s'applique lorsque la clé primaire est composée. Elle interdit qu'une colonne qui n'est pas une clé dépende seulement d'une partie de la clé (dépendance partielle).

La clé de notre ligne de commande est (order_id, product_id). Mais product_name et unit_price dépendent uniquement de product_id, et non de la clé entière. Il s'agit d'une dépendance partielle, ce qui constitue une violation de la 2NF.

La solution consiste à déplacer les attributs du produit dans une table products dont la clé est product_id.

CREATE TABLE products (
  product_id   INT PRIMARY KEY,
  product_name VARCHAR(100),
  unit_price   DECIMAL(10,2)
);

CREATE TABLE order_items (
  order_id   INT,
  product_id INT,
  quantity   INT,
  PRIMARY KEY (order_id, product_id),
  FOREIGN KEY (product_id) REFERENCES products(product_id)
);

Troisième forme normale (3NF)

3NF élimine les dépendances transitives : une colonne qui n'est pas une clé et qui dépend d'une autre colonne qui n'est pas une clé, au lieu de dépendre directement de la clé.

Supposons qu'une table orders contienne customer_id ainsi que customer_email. On a ici order_id -> customer_id -> customer_email. L'adresse e-mail ne dépend de la clé que par l'intermédiaire de customer_id : il s'agit d'une dépendance transitive.

La solution consiste à placer les clients dans leur propre table. Désormais, les colonnes qui ne sont pas des clés de chaque table dépendent uniquement de sa clé.

CREATE TABLE customers (
  customer_id    INT PRIMARY KEY,
  customer_email VARCHAR(255)
);

CREATE TABLE orders (
  order_id    INT PRIMARY KEY,
  customer_id INT,
  FOREIGN KEY (customer_id) REFERENCES customers(customer_id)
);

Le moyen mnémotechnique en une ligne

Les recruteurs apprécient les candidats capables de résumer la 3NF en une seule phrase. La formulation classique est la suivante :

« Toute colonne qui n'est pas une clé doit dépendre de la clé, de la clé entière et de rien d'autre que la clé. »

  • La clé -> 1NF (il y a une clé et les valeurs sont atomiques).
  • La clé entière -> 2NF (aucune dépendance partielle).
  • Rien d'autre que la clé -> 3NF (aucune dépendance transitive).

Cette seule phrase vous permet de reconstituer les trois formes à la demande.

BCNF : la question de suivi

Un recruteur pointu peut vous interroger sur la forme normale de Boyce-Codd (BCNF), une version plus stricte de la 3NF.

BCNF exige que, pour toute dépendance fonctionnelle X -> Y, X soit une superclé. La 3NF autorise une rare exception lorsque l'attribut dépendant fait partie d'une clé candidate ; BCNF élimine même cette exception.

Vous ne rencontrerez pas souvent de violations de BCNF en pratique, mais la mentionner et dire « BCNF est une 3NF sans exception pour les attributs premiers » démontre votre maîtrise du sujet.

Quand NOT normaliser

Une réponse de niveau expérimenté reconnaît le compromis. La normalisation améliore l'intégrité, mais peut nuire aux performances de lecture, car répondre à une requête nécessite davantage de jointures.

Une dénormalisation délibérée est acceptable lorsque :

  • La charge de travail est principalement orientée vers la lecture et les jointures constituent le goulot d'étranglement.
  • Vous construisez une couche d'analyse ou de production de rapports (schémas en étoile, abordés plus loin).
  • Vous pouvez maintenir la copie redondante synchronisée (déclencheurs, ETL, vues matérialisées).

Dites : « Normalisez pour l'intégrité d'OLTP ; dénormalisez délibérément pour la vitesse de lecture d'OLAP. »

Passage au tableau blanc

Mettons tout cela ensemble. Lors d'un entretien en direct, face à une table désordonnée :

  • Indiquez la clé candidate et listez les dépendances fonctionnelles.
  • Vérifiez l'atomicité et les groupes répétitifs (1NF).
  • Si la clé est composée, recherchez les dépendances partielles (2NF).
  • Recherchez les dépendances entre colonnes qui ne sont pas des clés (3NF).
  • Dessinez les tables obtenues avec leurs clés primaires et étrangères.

Expliquer ces étapes à voix haute est exactement ce que le recruteur évalue.

Vérification rapide

Testez votre compréhension des formes normales.

Récapitulatif : la normalisation jusqu'à la 3NF

Vous pouvez désormais répondre de bout en bout à la question classique d'entretien sur la normalisation :

  • La normalisation élimine les anomalies de mise à jour, d'insertion et de suppression en réduisant la redondance.
  • 1NF : valeurs atomiques, aucun groupe répétitif.
  • 2NF : aucune dépendance partielle par rapport à une clé composée.
  • 3NF : aucune dépendance transitive (entre colonnes qui ne sont pas des clés).
  • Résumez le tout par « la clé, la clé entière et rien d'autre que la clé ».
  • BCNF renforce la 3NF ; dénormalisez délibérément pour les analyses à forte dominante de lecture.

Questions Fréquemment Posées

La leçon « Normalisation jusqu’à la 3NF » est-elle gratuite ?

Oui — le texte complet de « Normalisation jusqu’à la 3NF » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours SQL Interview Prep, passe à CoddyKit PRO. Le cours SQL Interview Prep comprend 4 leçons au total.

Qu'est-ce que j'apprendrai dans « Normalisation jusqu’à la 3NF » ?

Première, deuxième et troisième formes normales, avec les anomalies qu’elles éliminent Tu pratiques SQL Interview Prep avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.

Dois-je avoir de l'expérience pour commencer SQL Interview Prep ?

Aucune expérience préalable n'est requise. SQL Interview Prep sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 1 sur 4.

Combien de temps prend la leçon « Normalisation jusqu’à la 3NF » ?

La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.

Peux-tu écrire et exécuter du code dans cette leçon SQL Interview Prep ?

Oui. Chaque leçon SQL Interview Prep inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.

Toutes les leçons de ce cours

  1. Normalisation jusqu’à la 3NF
  2. Modélisation ER et cardinalité des relations
  3. Schéma en étoile et conception d’un entrepôt de données
  4. Série complète d’exercices d’entretien blanc
← Retour à SQL Interview Prep