Svodjenje modela na drugu normalnu formu
Ako pogledamo tabelu „ZNANJE“ iz prethodnog primera gde smo sveli model na prvu normalnu formu, primetićemo da nam se podaci dupliciraju. Za razliku od tabele „KORISNIK“ gde atribut KORISNIK_ID definiše slog tabele, u tabeli KORISNIK slog definišu KORISNIK_ID i ZNANJE_ID atributi zajedno. Ovo u nekim slučajevima može da ima smisla, ali u našem slučaju, gde ime „znanja“ realno nije ni u kakvoj relaciji sa korisnikom i bezrazložno se multiplicira u tabeli, možemo zaključiti da nam se podaci „dupliraju“. Ovo dupliranje podataka, osim sto se odražava na prostor potreban za čuvanje istih, otežava i usporava operacije sa bazom.
Ako na primer želite da promenite ime jednog „znanje“ (na primer želite da „Audio“ postane „Rad sa zvukom“) morate to ime promeniti na više mesta, umesto samo na jednom (anomalija pri promeni). Dalje, pretpostavite da „mali perica“ ode sa foruma; u tom slučaju treba obrisati sve slogove vezane za njega; u tom slučaju, potpuno će nestati referenca da je znanje „Linux“ postojalo na forumu (anomalija pri brisanju).
Da bi ste zaobišli ove anomalije, potrebna vam je druga normalna forma.
Da bi „razvili“ našu bazu u drugu normalnu formu, potrebno je da razdvojimo atribute koji zavise od oba ključa koji definišu tabelu „ZNANJE“. Rezultat će biti dve tabele:
TABELA: ZNANJE
ZNANJE_ID: 1
ZNANJE_IME: AudioZNANJE_ID: 2
ZNANJE_IME: VideoZNANJE_ID: 3
ZNANJE_IME: HardwareZNANJE_ID: 4
ZNANJE_IME: WindowsZNANJE_ID: 5
ZNANJE_IME: BazeZNANJE_ID: 6
ZNANJE_IME: LinuxZNANJE_ID: 7
ZNANJE_IME: Programiranje
TABELA: KORISNIK_ZNANJE
ZNANJE_ID: 1
KORISNIK_ID: 1ZNANJE_ID: 2
KORISNIK_ID: 2ZNANJE_ID: 1
KORISNIK_ID: 3ZNANJE_ID: 2
KORISNIK_ID: 3ZNANJE_ID: 3
KORISNIK_ID: 3ZNANJE_ID: 4
KORISNIK_ID: 3ZNANJE_ID: 1
KORISNIK_ID: 4ZNANJE_ID: 2
KORISNIK_ID: 4ZNANJE_ID: 3
KORISNIK_ID: 4ZNANJE_ID: 4
KORISNIK_ID: 4ZNANJE_ID: 5
KORISNIK_ID: 4ZNANJE_ID: 6
KORISNIK_ID: 4ZNANJE_ID: 7
KORISNIK_ID: 4ZNANJE_ID: 3
KORISNIK_ID: 5ZNANJE_ID: 7
KORISNIK_ID: 5
Pozdrav,
Volio bih da mi autor ili neko objasni razliku između prve i druge normalizacije. Malo sam zbunjen jer i u prvoj i u drugoj se radi na ukljanjanju dupliranja podataka, pa mi je sad problem da ih razlikujem.
Usput, mislim da ima greška napisana u članku.
„Za razliku od tabele “KORISNIK” gde atribut KORISNIK_ID definiše slog tabele, u tabeli KORISNIK slog definišu…“
Valjda bi trebalo biti:
„Za razliku od tabele “KORISNIK” gde atribut KORISNIK_ID definiše slog tabele, u tabeli ZNANJE slog definišu…“