U izradi svog Master rada sam naišao na jednu dilemu - da li je pametnije mapirati vrednosti atributa na kolone ili redove u tabeli? Slede primeri mapiranja na
značajno pojednostavljenim modelima:
Mapiranje na redove:
upitnik(id, kreirao_korisnik_fk, naziv)
pitanje(id, upitnik_fk, tekst_pitanja, redosled, ...)
ponudjeni_odgovor(id, pitanje_fk, tekst_odgovora, redosled, ...)
korisnikov_odgovor(id, korisnik_fk, pitanje_fk, ponudjeni_odgovor_fk, ...)
Mapiranje na kolone:
upitnik(id, kreirao_korisnik_fk, naziv)
pitanje(id, upitnik_fk, tekst_pitanja, odgovori*, redosled, ...)
korisnikov_odgovor(id, korisnik_fk, upitnik_fk, odgovor1, odgovor2, ..., odgovorN**, ...)
* polje je tekstualnog tipa i u njemu su pojedinačni odgovori međusobno razdvojeni karakterom za novi red.
** odgovorX je odgovor na X-to pitanje upitnika. Takođe se unapred pri projektovanju baze mora postaviti ograničenje na maksimalni mogući broj ponuđenih odgovora na 1 pitanje.
Mapiranjem na kolone se postiže manji broj redova, ali su tada neke kolone NULL. Takođe se unapred mora odrediti maksimalni podržani broj ponuđenih odgovora na 1 pitanje.
Baza za koju sam dao 2 potencijalna modela je primarno namenjena za prihvatanje podataka (OLTP), ali bi bilo lepo kada bi bila prilagođena i za osnovno OLAP korišćenje da bi se izbeglo korišćenje 2 baze i njihova sinhronizacija, bar u početku.
Šta vi mislite?