Za DB model možemo reći da ispunjava uslove četvrte normalne forme ako za svaku ne trivijalnu višeznačnu zavisnost A→→ B postoji funckionalna zavisnost A→C za svaki atribut C u modelu, odnosno A je superključ. Prevedeno na srpski, svaka zavisnost je po ključu.
U realnom životu treća ili BC normalna forma su uglavnom dovoljne. Pregledao sam za života mnogo DB modela (jedna od stvari koje Platinum korisnici MySQL supporta imaju je schema & query review – gde im mi pregledamo/prepravimo db model i upite) i mogu reći da u 99.99% slučajeva DB model koji ne zadovoljava četvrtu normalnu formu ne zadovoljava je „sa razlogom“, tj. nedostatak vezanosti po ključu je odsutna iz prostog razloga što se ista u samoj aplikaciji jako retko koristi te je nekada optimalnije nemati ključ i imati sporiji upit jednom mesečno nego imati ključ i opteretiti sistem održavanjem tog ključa.
Kako smo izašli iz funkcionalnih odnosa koji su bitni za normalizaciju do BC normalne forme, moraćemo napraviti novi primer kako bi smo objasnili četvrtu normalnu formu. Možda je primer mogao da bude bolji, ali ja nisam prosvetni radnik niti pretendujem na tu poziciju pa kome se ne sviđa neka napiše bolje :D. Recimo da imamo advokatske kancelariju od kojih se
- pera zna kriminalno pravo i nekretnine
- pera poznaje nekoga u prvom i drugom opštinskom
- žika zna kriminalno pravo
- žika poznaje nekoga u drugom i trećem opštinskom
kada to sve pomnozimo, dobijemo ključ:
pera, kriminalno, prvi opstinski
pera, kriminalno, drugi opstinski
pera, nekretnine, prvi opstinski
pera, nekretnine, drugi opstinski
žika, kriminalno, drugi opstinski
žika, krimilano, treći opstinski
Ova tabela (ključ iz nekoliko tabela) ima dve ne trivijalne višeznačne zavisnosti [KO] →→ [ŠTA] i [KO] →→ [GDE], dakle, kada dođe klijent i prezentuje slučaj bitno je ko ima vezu u sudu gde se sudi i ko ima znanje o materiji o kojoj se sudi. Ove ne trivijalne višeznačne zavisnosti nad poljem koje nije superključ (KO) dovode do anomalije da ako žika nauči nekretnine moramo da dodamo to u 2 nova sloga. Da bi izbegli ovu anomaliju, ovu veznu tabelu (ključ) razbijamo u 2 tabele (ključa) [KO] [ŠTA] i [KO] [GDE]
Kako bi to prikazali i diagramom evo ga DB model u trećoj normalnoj formi, i onda taj isti u četvrtoj normalnoj formi.


Licno kod mene je opredeljivanje izmedju 3NF i 4NF zavisi od slucaja, tj od izvestaja. Jer nekad treba da su ti podaci STA i GDE povezani nekad ne, pa bi tesko bilo razdvojiti ih.
PS nisam ni znao da znam za 4NF to je izgleda urodjeno :)
Ako su STA i GDE u direktnoj vezi onda je prica potpuno drugacija posto ako su STA i GDE u direktnoj vezi veza od KO ka bilo kom od ta dva (STA ili GDE) definise i vezu sa onim drugim, dakle ako je X→Y i Y→Z onda X→Z sledi i nije ga potrebno zasebno definisati … to se radi do 3nf i sa 4nf nema veze. 4nf ima veze samo ako je X→YZ tj X→→Y ali u slucaju gde za svako Z postoko X→Z.
Navedeni primer (sa KO, STA, GDE) sa primerom DB modela u trcoj i cetvrtoj normalnoj formi je potpuno isti po tipu podatka koji moze da sacuva, razlika je samo u normalizaciji. Jedan od dva navedena modela ne moze da da „Vecu slobodu“ ili „bolje objasni“ model. Razlika je samo u nivou normalizacije te „nekad treba da su ti podaci STA i GDE povezani nekad ne, pa bi tesko bilo razdvojiti ih“ ne stoji iz prostog razloga sto je veza STA i GDE nedostajuca.
P.S. sto se tice „urodjenog dela“ … potpuno se slazem :) … kada pogledam modele koje sam modelirao pre nego sam cuo za normalizaciju i normalne forme, normalizovani su svi preko cetvrte forme ..
I ja licno u praksi rijetko srecem slucajeve, gdje je potrebna visa normalizacija od 3 NF…
Koji alat koristis za ER dijagrame?
Oni stari diagrami (1-3nf) su radjeni u ErWin-u (4.1 ako se dobro secam). To sam koristio do skoro, od skoro koristim iskljucivo MySQL WorkBench ( http://dev.mysql.com/workbench/ ). Ovi diagrami (plavi) su iz njega. WorkBench ima i ostale notacije, cak za razliku od vecine drugih moze da ima jednu notaciju za entitete a drugu za relacije i slicno .. prilicno lepo radi – ko nije probao – savetujem da obavezno proba. ( https://mysql.rstag/workbench/ )
ako 3nf dodamo kolone u tablici ko_has_sta, dali je baza u 3nf?
sta dodas gde ?
znači tabeli „ko_has_sta“ sa prve slike dodamo neke kolone.
to ce verovatno ubiti normalizaciju
http://northwind.bi4ce.com/Portals/0/Images/NorthwindDB.gif
dali je ovo ok kod OrderDetails?
kako bi se ova baza prevela u 3nf?
@8 odgovor
zar je kod 3nf, zabranjeno u veznoj tabeli imati dodatne kolone?
ako ovise o nekoj koja je dio primarnog ključa?
kao što je količina u OrderDetails kod te baze