Na pamet mi pada nekoliko rešenja:
1. dodavanje novih tabela - svaka tabela koja ima podatke na više jezika se pravi ponovo
tabela strane_sr
Id Brojac Naslov Sadrzaj
1 321 Ime Neki tekst
tabela strane_en
Id Brojac Naslov Sadrzaj
1 321 Name Some text
Ovde ima nekoliko problema: promena strukture jedne tabele zahteva promenu strukture i ostalih, promena jezički nezavisnih polja u jednoj zahteva promenu u ostalim. Zatim, ukoliko želimo da postavimo linkove (recimo da link mora da sadrži i naslov strane a ne samo Id koji imamo) ka svim ostalim prevedenim kopijama jedne strane (što je čest zahtev), potrebno je više ili jedan komplikovan upit ili posebna struktura koja čuva takve informacije. Ukoliko je potrebna (možda ne tako često) pretraga po podacima na svim jezicima, biće veoma spora. Podaci zauzimaju puno mesta i imaju svoje indekse što nas dovodi i do očigledne prednosti a to je brzina u radu sa konkretnim jezikom koji ne ometa/usporava postojanje ostalih.
2. dodavanje novih redova - u svakoj tabeli koja ima podatke na više jezika, svaki red postoji onoliko puta koliko jezika ima
tabela strane
Id Jezik Brojac Naslov Sadrzaj
1 sr 321 Ime Neki tekst
1 en 321 Name Some text
Pretpostavljam da je ovo rešenje u startu sporije od prethodnog ali je pitanje koliko? Primarni ključ bi se proširio za polje Jezik ali bi mogao da se doda i poseban indeks po tom polju koji bi ubrzao rad sa samo jednim jezikom. S druge strane linkovi ka prevedenim stranama se lakše nalaze, smao se pri upitu specificira samo Id i dohvate se i ostali (prevedeni) redovi - višak podataka postoji ali je jedan upit brži od dva, zar ne?
3. dodavanje novih kolona - svaka kolona koja sadrži jezički zavisne podatke se ponavalja onoliko puta koliko jezika ima
tabela strane
Id Brojac Naslov_sr Sadrzaj_sr Naslov_en Sadrzaj_en
1 321 Ime Neki tekst Name Some text
Svi podaci su u istom redu i administriranje (menjanje) sadržaja je najjednostavnije; doduše, slično kao i u prethodnom. Međutim, tabela je sada mnogo "šira" i samim tim verovatno mnogo sporija. Takođe, ovo je strukturno najčudnije rešenje i možda najnelogičnije...
4. hibridno rešenje - deljenje unutar sadržaja
tabela strane
Id Brojac Naslov Sadrzaj
1 321 Ime||Name Neki tekst||Some text
Ovde je ideja da sadržaje samo onih polja koja sadrže podatke na više jezika interno podelimo nakim separatorima (dao sam samo primer sa || koji ne definiše koji jezik sledi, ali shvatate poentu). Ako želimo pretragu po svim jezicima ovo je najbrže rešenje ali prilično usporava rad sa samo jednim jezikom.
U principu, svaki pristup može da ima primenu u nekim situacijama i za neke tipova podataka, tako da bi valjalo istaći kada je koji najbolje koristiti...
[Ovu poruku je menjao Guardian OfThe Blind dana 18.04.2006. u 13:50 GMT+1]