IT Akademia
Panel / ๐Ÿ’ป Programowanie i skrypty โ€” Git, Python, SQL, API / Lekcja 6/9

Modelowanie ER i normalizacja (1NF-BCNF)

โฑ 30 min ยท poziom 5/5
๐Ÿ“œ Wprowadzenie โ€” od historii do szczegolu 1970-1974

Gdy Edgar Codd wymyslil model relacyjny, zauwazyl tez pulapke: zle zaprojektowana tabela prowadzi do anomalii โ€” te same dane powtarzaja sie w wielu miejscach, a jedna zmiana wymaga poprawek w dziesiatkach wierszy (albo o nich zapominasz, i baza klamie). Dlatego w latach 70. sformalizowal postacie normalne (1NF, 2NF, 3NF, BCNF) โ€” reguly, ktore eliminuja redundancje.

To lekcja poziomu 5 o projektowaniu baz, ktore sie nie psuja. Od historii problemu redundancji zejdziemy do konkretu: modelowanie zwiazkow encji (ER), klucze glowne i obce oraz kolejne postacie normalne krok po kroku, na realnym przykladzie. To roznica miedzy baza, ktora skaluje sie latami, a taka, ktora po roku staje sie niespojnym bagnem.

Po tej lekcji bedziesz umiec:

Zla struktura tabel mnozy dane i rodzi anomalie: aktualizujesz adres firmy w jednym wierszu, a w 200 innych zostaje stary. Normalizacja to dyscyplina, ktora usuwa te pulapki JESZCZE przed napisaniem pierwszego zapytania.

Encje, atrybuty, zaleznosci funkcyjne

Relacje i kardynalnosc

KardynalnoscRealizacja w schemaciePrzyklad
1:1FK z UNIQUE po jednej stronieUzytkownik -> Profil
1:NFK po stronie 'wielu'Dzial -> Uzytkownicy
M:NTABELA LACZACA (junction) z dwoma FKUzytkownik <-> Rola
M:N nie da sie zrobic 'wprost'. Zawsze wstawiasz tabele laczaca (np. `uzytkownik_rola` z parami user_id+rola_id). To najczestszy element, ktory juniorzy pomijaja.

Postacie normalne โ€” po co i jak

  1. **1NF** โ€” wartosci atomowe, brak grup powtarzalnych. Zaden 'telefon1, telefon2, telefon3' ani lista '111,222,333' w jednej komorce.
  2. **2NF** (dla kluczy zlozonych) โ€” brak zaleznosci CZESCIOWEJ: atrybut nie moze zalezec od CZESCI klucza. Np. w (zamowienie_id, produkt_id) nazwa_produktu zalezy tylko od produktu -> wynies.
  3. **3NF** โ€” brak zaleznosci PRZECHODNIEJ: atrybut niekluczowy nie zalezy od innego niekluczowego. `kod_pocztowy -> miasto` w tabeli usera => wynies do slownika.
  4. **BCNF** โ€” kazdy determinant jest kluczem kandydujacym (ostrzejsza wersja 3NF dla nietypowych nakladajacych sie kluczy).
Skrot mnemoniczny 3NF: kazdy atrybut zalezy od klucza, calego klucza i niczego oprocz klucza ('the key, the whole key, and nothing but the key').

Anomalie, ktore znika po normalizacji

Denormalizacja โ€” swiadomy wyjatek

W hurtowniach danych i tam, gdzie odczyty dominuja nad zapisami, czasem CELOWO duplikujemy dane (np. przechowany COUNT, zmaterializowany widok), by uniknac kosztownych JOIN-ow. To decyzja wydajnosciowa PO normalizacji, nie zamiast niej โ€” i zawsze z planem na spojnosc.

๐ŸŽฏ Cwiczenia podsumowujace

Gotowe? Oznacz lekcje jako ukonczona
Postep zapisuje sie automatycznie.
โ† Poprzednia Nastepna โ†’