BLOK 17 · 2 godz. Bazy danych Normalizacja SQL

Relacyjne bazy danych i normalizacja (1NF–3NF)

Informatyka Rozszerzona · Klasa 4 · Semestr II · Blok 17/30

1. Czym jest relacyjna baza danych?

Relacyjna baza danych przechowuje dane w postaci tabel (relacji), gdzie każdy wiersz to rekord, a każda kolumna to atrybut. Tabele można ze sobą łączyć dzięki kluczom — to pozwala uniknąć powielania danych i utrzymać ich spójność.

2. Klucz główny i klucz obcy

PojęcieDefinicjaPrzykład
Klucz główny (PK)Unikalny identyfikator każdego wiersza w tabeliid_ucznia w tabeli Uczniowie
Klucz obcy (FK)Kolumna wskazująca na klucz główny innej tabeli — buduje relacjęid_klasy w tabeli Uczniowie, wskazujący na tabelę Klasy
CREATE TABLE Klasy ( id_klasy INTEGER PRIMARY KEY, nazwa VARCHAR(10) ); CREATE TABLE Uczniowie ( id_ucznia INTEGER PRIMARY KEY, imie VARCHAR(50), nazwisko VARCHAR(50), id_klasy INTEGER, FOREIGN KEY (id_klasy) REFERENCES Klasy(id_klasy) );

3. Normalizacja — dlaczego dzielimy dane na tabele?

Normalizacja to proces eliminowania redundancji (powielania) danych i anomalii przy ich modyfikacji, poprzez organizowanie danych w tabele według określonych reguł zwanych postaciami normalnymi.

Przykład złego projektu (bez normalizacji)

Jedna tabela: Zamowienie(id, klient, adres_klienta, produkt1, produkt2, produkt3). Problemy: adres klienta powtarza się w każdym zamówieniu (redundancja), a sztywna liczba kolumn na produkty ogranicza zamówienie do 3 pozycji.

1NF (pierwsza postać normalna)

Każda komórka zawiera dokładnie jedną, atomową wartość (żadnych list w jednej komórce, żadnych powtarzających się grup kolumn jak produkt1, produkt2, produkt3).

2NF (druga postać normalna)

Spełnia 1NF, a dodatkowo każdy atrybut niekluczowy zależy od całego klucza głównego (dotyczy tabel z kluczem złożonym z kilku kolumn).

3NF (trzecia postać normalna)

Spełnia 2NF, a dodatkowo żaden atrybut niekluczowy nie zależy od innego atrybutu niekluczowego (eliminujemy zależności przechodnie). Np. jeśli tabela Uczniowie zawiera nazwa_klasy zależną od id_klasy, a nie bezpośrednio od klucza głównego ucznia — wydzielamy osobną tabelę Klasy.

4. Przykład: od jednej tabeli do 3NF

-- PRZED normalizacją (redundancja: nazwa_klasy powtarza się) Uczniowie(id_ucznia, imie, nazwisko, id_klasy, nazwa_klasy, wychowawca) -- PO normalizacji do 3NF: dwie osobne tabele Uczniowie(id_ucznia, imie, nazwisko, id_klasy) Klasy(id_klasy, nazwa_klasy, wychowawca)

5. Ćwiczenia praktyczne

Ćwiczenie 1 — zaprojektuj schemat

Zaprojektuj (na kartce lub w SQL) schemat relacyjnej bazy danych dla wypożyczalni książek: książki, czytelnicy, wypożyczenia. Każda książka może być wypożyczona wielokrotnie przez różnych czytelników — zaprojektuj tabele tak, by uniknąć redundancji (3NF).

Ksiazki(id_ksiazki, tytul, autor) Czytelnicy(id_czytelnika, imie, nazwisko) Wypozyczenia(id_wypozyczenia, id_ksiazki, id_czytelnika, data_wypozyczenia, data_zwrotu)

Ćwiczenie 2 — znajdź błąd normalizacji

Dana jest tabela Zamowienia(id_zamowienia, id_klienta, imie_klienta, produkt, cena_produktu). Wskaż, która postać normalna jest złamana i zaproponuj poprawę.

Sprawdź wiedzę

1. Do czego służy klucz obcy (FK) w relacyjnej bazie danych?

2. Która postać normalna wymaga, aby każda komórka zawierała pojedynczą, atomową wartość?

3. Czego dotyczy 3NF?

Podsumowanie bloku