Używamy cookies, żeby zwiększyć Twoje doświadczenia na stronie
CodeWorlds

Normalizacja: 1NF, 2NF, 3NF

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.

1NF - wartości atomowe

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ą.

2NF - brak zależności od części klucza

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
.

3NF - brak zależności przechodnich

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.

Przejdź do CodeWorlds