Sve u jednoj tabeli ili je bolje napraviti trecu tabelu?

Ako npr imam tabele
OGLASI i tabelu KATEGORIJE, ako zelim da se oglasu iz tabele OGLASI dodele 2 kategorije iz tabele KATEGORIJE da li je bolje,

opcija 1:
da ID iz tabele KATEGORIJE bude smesten u istoj tabeli OGLASI u dve kolone id_kategorija1 i id_kategorija2

opcija 2:
da se napravi treca tabela OGLASI_KATEGORIJE gde ce biti samo dve kolone ID_OGLASA i ID_KATEGORIJE i tu upisivati sve, za svaki oglas i kategoriju.

Opcija 2.

Kada bi postojao neki prirodni razlog zašto oglas ne bi imao više od dvije kategorije, opcia 1 bi bila prihvatljiva. Također i kada bi postojao razlog zašto nikada oglas neće biti u više od dvije kategorije, onda isto. Međutim, u ostalim slučajevima je opcija 2 prihvatljiva.

Primjerice, da u tvom oglasniku oglasi imaju nekakvu “kategoriju” i “podkategoriju”, mogao bi razmišljati o opciji 1, jer će cijeli proces, dizajn weba i sl. biti prilagođen tome. Drugim riječima, opcija 2 nema puno smisla ako ćeš nakon toga pri prikazu web-stranice opet očekivati da je oglas u samo dvije kategorije, bez da na razini pristupa podacima osiguraš neku fleksibilnost za lakše izmjene koda u slučaju da u budućnosti netko otkrije da bi oglasi trebali biti svrstavani u više od dvije kategorije.

Ako stvar gledaš čisto na razini modeliranja, ukoliko ti se obje relacije između oglasa i jedne kategorije i oglasa i druge kategorije jednako zovu, imaju isto značenje, onda je opcija 2 očekivani način modeliranja. Uoči da tablici s relacijom u opciji 2 možeš pridružiti i neki atribut koji će međusobno uređivati relacije, npr. redosljed ispisa ili prioriteta kategorije.

Hvala tsereg na odgovoru!
Kod upisa oglasa bice mogucnost da mogu da se izaberu dve kategorije (druga nije podkategorija, vec isto kategorija u koju se oglas moze svrstati).
Trenutno, a ni u bliskoj buducnosti, koliko mogu daleko da predvidim :), mislim da nece biti potrebno vise od 2 kategorije, ali sam se ipak odlucio da koristim i trecu tabelu jer mi je nekako lakse dobiti koliko je oglasa smesteno u nekoj kategoriji, znaci vrsiti sumiranje, brojanje, lakse mi je odraditi GROUP BY, dok u prvom slucaju, moram 2x pozivati istu tabelu OGLASI kako bih odradio GROUP BY za dve razlicite kolone, pa onda te vrednosti skupiti i dobiti koliko ima oglasa u pojedinim kategorijama i na kraju odraditi ORDER BY DESC po broju oglasa u kategorijama.
E sad, ne znam da li se moze odraditi 1 upit, ukoliko ne koristim trecu tabelu, te da tako dobijem broj oglasa u svakoj kategoriji i odradim onaj ORDER BY?

Prema tvom pojašnjenju namjene, čini se da je opcija za koju si se odlučio bolja, pošto se stvarno radi o tome da se oglas može svrstavati u VIŠE kategorija - niti ima neki prirodni razlog (kao “kategorija” i “podkategorija”), niti imaš neki razlog zašto se nikada ne bi koristile više od dvije kategorije.

Što se tvog pitanja tiče, vidi:

tsereg je dao vrlo dobar konkreta savjet.

Generalno je pravilo da model (a onda i struktura baze) što vjernije oslikava stvarnost, bez obzira na trenutnu funkcionalnost. Dakle, ako oglas može biti u više kategorija, onda je to M2M (Many To Many) odnos, pa treba treća tabela.

Ali objašnjenje što moraš koiko puta pozivati ne stoji. S dvije taele bi bilo jednostavnije, ali bi bilo krivo.


Copyright © 2022 WM Forum - AboutContact