Dobrze zaprojektowana Biblioteka nie przechowuje tej samej informacji w wielu miejscach. Normalizacja to sztuka takiego dzielenia danych na tabele, by uniknąć powtórzeń i błędów. Przejdźmy przez trzy podstawowe poziomy.
Pierwsza postać normalna wymaga, by w każdej komórce była jedna wartość. Zła tabela:
| id | tytul | autorzy | |----|-------|---------| | 1 | Antologia | Homer; Platon |
Kolumna
autorzy łamie 1NF - mieści dwie wartości. W 1NF rozbijamy je tak, by każda komórka trzymała jedną daną.Druga postać normalna dotyczy tabel z kluczem złożonym (z kilku kolumn). Wymaga, by każda kolumna niekluczowa zależała od całego klucza, a nie od jego części. Jeśli w tabeli
wypozyczenia (klucz: ksiazka_id + czytelnik_id) trzymalibyśmy tytuł książki, zależałby on tylko od ksiazka_id - to łamie 2NF. Tytuł należy do tabeli ksiazki.Trzecia postać normalna zabrania, by kolumna niekluczowa zależała od innej kolumny niekluczowej. Przykład złej tabeli:
| id | tytul | kategoria_id | nazwa_kategorii | |----|-------|--------------|------------------|
Tu
nazwa_kategorii zależy od kategoria_id, a nie wprost od klucza id. To zależność przechodnia. Rozwiązanie - podział tabeli:1SELECT k.tytul, kat.nazwa
2FROM ksiazki k
3JOIN kategorie kat ON k.kategoria_id = kat.id;Nazwę kategorii trzymamy raz, w tabeli
kategorie, a w ksiazki zostaje tylko kategoria_id. Tak właśnie zbudowana jest nasza baza - każdy fakt zapisany w jednym miejscu.