Eventuali duplicati:
Schema for a multilanguage databaseProgettazione di uno schema di database localizzato
Sto lavorando su un'applicazione web che ho in programma di rendere disponibile in più lingue. Mentre progetto il database, sto andando avanti e indietro tra due diversi modi per archiviare descrizioni localizzate e quant'altro nel database.
prima opzione è il ben noto table_name, opzione type table_name_ml:
TABLE Category (
ID int,
ParentID int,
Name varchar(50),
Description varchar(255)
)
TABLE Category_ML (
ID int,
CategoryID int,
LocaleID int,
Name varchar(50),
Description varchar(255)
)
La seconda opzione sarebbe quella di non memorizzare il testo nelle tabelle di base a tutti, ma memorizza un token che potrebbe essere utilizzato di ricercare il testo effettivo localizzato altrove, in questo modo:
TABLE Category (
ID int,
ParentID int,
NameToken varchar(50),
DescriptionToken varchar(50),
)
// Tables in a separate content management type system
TABLE Content (
ID int,
Token varchar(50)
)
TABLE Translation (
ID int
ContentID int,
LocaleID int,
Value text
)
l'idea è che il contenuto e traduzione tabelle sarebbero contenere il testo localizzato per molti soggetti diversi nel database. Il livello di servizio restituirebbe gli oggetti di base con solo i token e il livello di visualizzazione cercherebbe i valori di testo effettivi usando le tabelle Contenuto/Traduzione, che sarebbero pesantemente memorizzate nella cache. Le tabelle Contenuto/Traduzione verrebbero utilizzate anche per memorizzare altro tipo di contenuto CMS (testo statico su pagine Web, ecc.)
Mi piace la prima opzione perché è provata e vera, ma la seconda opzione sembra avere così tante altre vantaggi:
- Tutto il mio testo/contenuto localizzato è in un posto (rende più facile la traduzione).
- Il livello di servizio non ha realmente bisogno di preoccuparsi delle impostazioni locali.
- Semplifica le query non dovendo partecipare a un gruppo di tabelle di tipi ML.
Dal momento che non ho mai visto un progetto come questo prima, presumo che mi manchi qualcosa. Qualche buona ragione per non progettarlo in questo modo? O forse c'è un'opzione migliore a cui non ho pensato?
Perché hai una tabella contenuti? Non potresti semplicemente usare il tuo token per cercare direttamente la traduzione nel Translation-Table ??? –
No, ci penso, se i token contengono solo informazioni come. . perché la categoria del tavolo necessita comunque di token-properties ?? –
@paskster - La tabella del contenuto è lì per evitare la duplicazione della colonna di token nella tabella di conversione. Ci sarebbero molte traduzioni per un determinato token. Permette anche di avere RI tra la tabella delle categorie e la tabella dei contenuti, se lo si desidera. –