Cours SQL et MySQL · Module 9: Index et normalisation

La normalisation : 1FN, 2FN, 3FN

2 min de lecture
Dans cette leçon3

Une Bibliothèque bien conçue ne stocke pas la même information à plusieurs endroits. La normalisation est l'art de répartir les données en tables afin d'éviter les répétitions et les erreurs. Parcourons les trois niveaux de base.

1FN - des valeurs atomiques

La première forme normale exige une seule valeur dans chaque cellule. Une table mal conçue :

idtytulautorzy
1AnthologieHomère ; Platon

La colonne autorzy enfreint la 1FN - elle contient deux valeurs. En 1FN, nous les séparons pour que chaque cellule ne garde qu'une seule donnée.

2FN - aucune dépendance envers une partie de la clé

La deuxième forme normale concerne les tables ayant une clé composite (formée de plusieurs colonnes). Elle exige que chaque colonne non-clé dépende de toute la clé, et non d'une partie seulement. Si dans la table wypozyczenia (clé : ksiazka_id + czytelnik_id) nous conservions le titre du livre, il ne dépendrait que de ksiazka_id - ce qui enfreint la 2FN. Le titre appartient à la table ksiazki.

3FN - aucune dépendance transitive

La troisième forme normale interdit qu'une colonne non-clé dépende d'une autre colonne non-clé. Un exemple de table mal conçue :

idtytulkategoria_idnazwa_kategorii

Ici, nazwa_kategorii dépend de kategoria_id, et non directement de la clé id. C'est une dépendance transitive. La solution - séparer la table :

1SELECT k.tytul, kat.nazwa
2FROM ksiazki k
3JOIN kategorie kat ON k.kategoria_id = kat.id;

Nous gardons le nom de la catégorie une seule fois, dans la table kategorie, et seul kategoria_id reste dans ksiazki. C'est exactement ainsi qu'est construite notre base de données : chaque fait écrit à un seul endroit.

Tu as repéré une erreur dans cette leçon ?

Teste tes connaissances

Réponds aux questions de cette leçon. Choisis une réponse pour voir tout de suite si elle est correcte.

  1. 1. Que demande la première forme normale (1NF) ?

  2. 2. Qu'interdit la troisième forme normale (3NF) ?

Tâches pratiques dans le jeu

  • Tri vertical

    Ordonne les niveaux de normalisation dans l'ordre où on les applique - du plus basique au plus élevé :

  • Tri vertical

    Ordonne les étapes de la division d'une table qui enfreint la 3NF (où le nom de la catégorie dépend de kategoria_id) - du problème à la solution :

  • Éditeur de code

    Écris une requête qui récupère tytul de la table ksiazki et nazwa de la table kategorie, en les joignant sur la colonne kategoria_id (ksiazki.kategoria_id = kategorie.id). Utilise JOIN.