Normalizacja Bazy Danych

Normalizacja to sposób uporządkowania bazy danych, żeby:

  • nie powtarzać tych samych informacji (redundancja),
  • dane były spójne i łatwe do aktualizacji,
  • baza była czytelna i logiczna.

Można powiedzieć, że normalizacja to „sprzątanie” bazy danych – rozdzielamy dane na mniejsze, dobrze zorganizowane tabele i łączymy je relacjami.


Dlaczego to ważne?

Wyobraź sobie tabelę uczniów:

ID_uczniaImięNazwiskoKlasaWychowawcaSala
1JanKowalski2ANowak12
2OlaWiśniewska2ANowak12
3PiotrMalinowski2BKowalczyk14

Problem:

  • Informacja o wychowawcy i sali powtarza się przy każdym uczniu.
  • Jeśli klasa 2A zmieni salę z 12 na 16, to trzeba poprawić wiele rekordów – łatwo o błąd.

Po normalizacji rozbijamy to na osobne tabele:

UCZNIOWIE

ID_uczniaImięNazwiskoID_klasy
1JanKowalski1
2OlaWiśniewska1
3PiotrMalinowski2

KLASY

ID_klasyNazwaWychowawcaSala
12ANowak16
22BKowalczyk14

Teraz zmiana sali dla klasy 2A to tylko jedna poprawka w tabeli KLASY.


Zasady normalizacji

Normalizacja składa się z tzw. form normalnych (NF) – to kolejne etapy porządkowania bazy.

1. Pierwsza forma normalna (1NF)

  • W tabeli nie ma powtarzających się grup danych.
  • Każda kolumna przechowuje tylko jedną wartość.

Źle:

IDImięPrzedmioty
1Janmatematyka, fizyka, informatyka

Dobrze (po 1NF):

IDImięPrzedmiot
1Janmatematyka
1Janfizyka
1Janinformatyka

2. Druga forma normalna (2NF)

  • Obowiązuje, gdy tabela ma klucz złożony (kilka kolumn jako klucz główny).
  • Każda kolumna musi zależeć od całego klucza, a nie tylko od części.

Źle:

Tabela OCENY (klucz = [ID_ucznia, ID_przedmiotu])

ID_uczniaID_przedmiotuOcenaImię ucznia
154Jan

„Imię ucznia” nie zależy od całego klucza (ID_ucznia + ID_przedmiotu), tylko od ID_ucznia.

Dobrze:

Osobna tabela UCZNIOWIE z imionami, a tabela OCENY przechowuje tylko ID i ocenę.


3. Trzecia forma normalna (3NF)

  • W tabeli nie mogą być dane zależne od innych kolumn (tzw. zależności przechodnie).

Źle:

ID_uczniaKlasaWychowawca
12ANowak

„Wychowawca” nie zależy od ucznia, tylko od klasy.

Dobrze:

  • tabela UCZNIOWIE (ID_ucznia, Imię, Nazwisko, ID_klasy),
  • tabela KLASY (ID_klasy, Nazwa, Wychowawca).

Podsumowanie

Normalizacja to proces dzielenia danych na logiczne tabele i łączenia ich relacjami, żeby:

  • uniknąć powtarzania danych,
  • łatwiej aktualizować informacje,
  • utrzymać spójność w bazie.

Formy normalizacji (najważniejsze do INF.03):

  • 1NF – brak powtarzających się grup danych.
  • 2NF – brak zależności od części klucza złożonego.
  • 3NF – brak zależności przechodnich między kolumnami.

    Film1

Film2 (youtube – kanał nieinformatyk)

Zadanie – Normalizacja bazy danych

W pewnej szkole prowadzona jest taka tabela:

ID_uczniaImięNazwiskoKlasaSalaWychowawca
1JanKowalski2A12Nowak
2OlaWiśniewska2A12Nowak
3PiotrMalinowski2B14Kowalczyk
4AnnaZielińska2B14Kowalczyk

Polecenia dla ucznia:

  1. Wskaż, jakie problemy występują w tej tabeli (redundancja, spójność danych).
  2. Podziel dane na dwie tabele zgodnie z zasadami normalizacji (3NF):
    • tabela UCZNIOWIE,
    • tabela KLASY.
  3. Zapisz przykładowe rekordy do obu tabel po normalizacji.
  4. Napisz zapytanie SQL, które wyświetli listę uczniów wraz z ich wychowawcą.

***

ODP