Cours SQL et MySQL · Module 9: Index et normalisation
La normalisation : 1FN, 2FN, 3FN
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 :
| id | tytul | autorzy |
|---|---|---|
| 1 | Anthologie | Homè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 :
| id | tytul | kategoria_id | nazwa_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. Que demande la première forme normale (1NF) ?
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.