[MySQL] Struttura DB da testare per MULTILINGUA

martedì 21 febbraio 2012 - 15.49

w_t Profilo | Junior Member

Salve,
se possibile mi servirebbe un consiglio su come impostare le Tabelle nel Database per un sito dinamico in Multilingua dove all'interno dovrò gestire un Catalogo di prodotti con Categorie.


Io in passato ho fatto la seguente struttura tabellare:
prodotti ( contiene tutti i campi che non devono essere tradotti ) id_prodotto int(11) NOT NULL AUTO_INCREMENT, cod_prodotto char(15) NOT NULL, disponibilita int(11) NOT NULL, data_inserimento datetime NOT NULL prodotti_ln ( contiene tutti i campi che devono essere tradotti ) id_prodotto int(11) NOT NULL, ln char(2) NOT NULL, nome_prodotto varchar(255) NOT NULL, dettagli_prodotto text NOT NULL

- dove nella tabella "prodotti_ln"
il campo "id_prodotto" non è AUTO_INCREMENT, perchè devo inserire il valore dell'id_prodotto dalla tabella "prodotti".

- dove nel campo "ln" inserisco la lingua di traduzione, es: IT, EN, FR, etc..

- gli altri campi contengono valori da tradurre in lingua.


Quando interrogo per estrarre tutti i prodotti in Italiano utilizzo la seguente Query:

SELECT prodotti.id_prodotto, prodotti.cod_prodotto, prodotti.disponibilita, prodotti.data_inserimento, prodotti_ln.ln, prodotti_ln.nome_prodotto, prodotti_ln.dettagli_prodotto FROM prodotti LEFT OUTER JOIN prodotti_ln ON (prodotti.id_prodotto = prodotti_ln.id_prodotto) WHERE (prodotti_ln = 'IT')

Cosa ne pensate ??
Mi date delle ditte in fatto di Prestazioni, Struttura o Altro ??

Grazie mille!

alx_81 Profilo | Guru

>Salve,
ciao

>Cosa ne pensate ??
penso che sia un pattern piuttosto standard. Ovviamente, più i dati aumentano, più la soluzione non è scalabile, in quanto sei costretto a legare sempre tabelle per ogni query. Certo è che altre strutture (come il software che legge il risultato di tali query) possono sempre fare cache. In quel modo, riducendo le chiamate, puoi andare anche a leggere dalla cache, evitando di coinvolgere sempre il database.
Diciamo che potresti inserire una colonna nell'oggetto master (quello senza lingua) in cui metti il nome di default, così le query che non necessitano multilingua e localizzazione non appesantiscono il db. Ad esempio, una colonna "nome" con il termine in italiano, non ripetuto poi nelle traduzioni, ti consente di servire chi non necessita di lingua (vari backoffice, o reports non localizzati) alleggerendo la chiamata. Se invece riesci ad uscire dal contesto del database, potresti farti un serverino di traduzioni, e poi il biz layer va a legare, via id, la traduzione statica al record che ti arriva da db.
Ovviamente questa soluzione poi necessita un BO di gestione..

>Grazie mille!
di nulla
--
Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2017
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5