Ne slazem se sa potencijalnim rjesenjima cijenjenih kolega, jer se predlozenim rjesenjima OSNOVNI zadatak baze pokusava prebaciti na aplikaciju - koristenje vise tabela (za svaki jezik po jedna), spremanje vrijednosti odabranog jezika u neku varijablu, pa dinamicki odabir tabela i td.
Slazem se sa izjavom da nekad ne treba bas sve po knjigama raditi, odnosno da ne treba normalizovati podatke u tabelama do najsitnijih detalja i referenci, ali do tih slucajeva se dolazi uglavnom u odredjenim situacijama...
Evo kako smo mi odradili visejezicnu podrsku u nasoj bazi - uzecu npr. fondove, jer imamo visejezicnost za mnoge stvari:
1. imamo glavnu tabelu sa fondovima (fund_id, name, ... )
2. imamo tabelu sa opisima fondova na vise jezika (surogatni_id, fund_id, language, fund_description, ...)
E sad, posto smo spomenuli normalizaciju i denormalizaciju, ovo je idealan primjer denormalizacije. Naime, mogli bismo kreirati jos jednu tabelu za jezike (jezik_id, naziv_jezika, oznaka), pa ju onda koristiti u JOIN dijelu, ali posto je broj koristenih jezika veoma mali, ne isplati se cuvati informaciju o koristenim jezicima.
Znaci, ako nam na njemackom jeziku treba opis fonda pod brojem 11, onda upit izgleda ovako:
Kôd:
SELECT fund_description
FROM funds_descriptions
WHERE fund_id = 11
AND language = 'DE';
Ukoliko bismo koristili jos jednu normalizovanu lookup tabelu sa jezicima, onda bi upit izgledao ovako:
Kôd:
SELECT fd.fund_description
FROM funds_descriptions fd, languages l
WHERE l.language = 'DE'
AND fd.language_id = l.id
AND fd.fund_id = 11;
@McChoban: Tebi treba jedna language tabela sa poljima (id, ref_id_iz_prve_tabele, jezik, opis, ...), npr. imas u prvoj tabeli ove podatke:
I sad zelis da za URL pod brojem 2 imas opise na vise jezika ukljucujuci engleski, njemacki i td., na osnovu cega u ovoj novoj tabeli imas podatke:
Kôd:
ID URL_ID JEZIK OPIS
--- ------- ------ ------------------------------------
1 2 EN This is just a dummy description ...
2 2 DE Das ist nur eine dumme Beschreibung ...
3 2 ?? lorem ipsum ...
Dakle, onaj posao - za koji su baze namijenjene - treba bazama prepustiti i ne izmisljati toplu vodu...