Prva normalna forma
Moje vidjenje prve normalne forme cu prikazati kroz dva primera, jer ma kako prosto zvucala, sustinski je teska za razumevanje, pogotovo sto SQL ne moze da je narusi.
Prvi primer:
Imamo relaciju
Osobe (sifra_osobe, ime_osobe, prezime_osobe, ime_prvog_deteta, ime_drugog_deteta, ime_treceg_deteta)
gde je sifra_osobe kljucni atribut.
Ova relacija
ne narusava prvu normalnu formu.
Razlog: Imena atributa jasno naznacavaju da je redosled unosa imena dece bitan. Redosled navodjenja imena dece je ujedno i redosled rodjenja dece.
Podatak
Osobe (1, Pera, Peric, Laza, -, -)
nam govori da Pera Peric ima prvorodjeno dete Lazu, ali ne znamo da li ima jos dece.
S druge strane, podatak
Osobe (1, Laza, Peric, -, Mika, -)
nam govori da Laza Peric ima sigurno dvoje dece. Za prvo dete nemamo podatak o imenu, dok se drugo zove Mika.
U oba slucaja imamo ime samo jednog deteta, ali je interpretacija tog jednog imena razlicita. Zbog te razlicite interpretacije pocetna relacija Osobe ne narusava prvu normalnu formu!
Drugi primer:
Imamo relaciju
Osobe (sifra_osobe, ime_osobe, ime_deteta_1, ime_deteta_2, ime_deteta_3)
sa semantickim znacenjem da nam je redosled navodjenja imena dece NEBITAN.
Ova relacija
narusava prvu normalnu formu.
Razlog:
Podaci:
Osobe (1, Pera, Peric, Laza, -, -)
Osobe (1, Pera, Peric, -, Laza, -)
Osobe (1, Pera, Peric, -, -, Laza)
nam govore apsolutno istu stvar - da Pera Peric ima barem jedno dete koje se zove Laza.
Dakle, Razliciti podaci imaju isto znacenje te stoga narusavaju prvu normalnu formu.
Druga normalna forma
Potreban uslov da se narusi druga normalna forma je da relacija ima kompozitni kljuc (sastavljen od vise atributa).
Sustina je da atribut ne sme da zavisi od dela kljucnih atributa.
Kroz primer. Imamo relaciju:
Pokazano_Znanje(sifra_studenta, ime_studenta, sifra_predmeta, ime_predmeta, ocena)
Kljucni atributi ove relacije su sifra_studenta + sifra_predmeta.
Ocena zavisi od celog kljuca, ali ime_studenta zavisi samo od sifre_studenta. Ime studenta nema nikave veze sa predmetom.
Imamo podatke
(1, Pera, 11, Matematika, 6)
(1, Mika, 12, Srpski, 6)
Postavlja se pitanje da li se student sa sifrom 1 zove Pera ili Mika?
Ova relacija narusava drugu normalnu formu.
Treca normalna forma
Sustina je da atribut ne sme da zavisi od ne kljucnog(kljucnih) atributa
Opet kroz primer. Imamo relaciju
Radnici (sifra_radnika, ime_radnika, prezime_radnika, ime_sektora, sediste_sektora)
gde je sifra_radnika kljucni atribut, a jedan sektor moze imati samo jedno sediste.
Imamo podatke
Radnici (1, Laza, Lazic, Odrzavanje, Subotica)
Radnici (2, Pera, Peric, Odrzavanje, Subotica)
i za sada je sve u redu, ali se pojavljuje podatak
Radnici (3, Mika, Mikic, Odrzavanje, Beograd)
Postavlja se pitanje da li je sediste sektora odrzavanja u Subotici ili u Beogradu? Ovde se pojavila anomalija unosa, ali se nad istom relacijom moze pojaviti i anomalija izmene i/ili brisanja.
Ova relacija narusava trecu normalnu formu jer sediste sektora zavisi iskljucivo od imena sektora, ali ne i od sifre radnika.
PS: Ako sam negde pogresio naci ce se vec neko da me ispravi.
"The best code is no code at all."
- Zidar (ES član)
"Biggest obstacle to learning
SQL is unlearning procedural
programming." - Joe
Celko
"Minimize code, maximize data."
- A. Neil Pappalardo