Possible en double:
Schema for a multilanguage databaseLa conception d'une base de données Localisée schéma
Je travaille sur une application web que je prévois de mettre à la disposition en plusieurs langues. Lorsque je conçois la base de données, je fais deux va-et-vient entre deux façons différentes de stocker des descriptions localisées et d'autres choses dans la base de données.
La première option est le table_name bien connu, l'option de 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 deuxième option serait de ne pas stocker le texte dans les tableaux de base à tous, mais à la place un jeton qui pourrait être utilisé pour rechercher le texte localisé réelle ailleurs, comme ceci:
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'idée est que les tables de contenu et traduction détiendraient le texte localisé pour de nombreuses entités différentes dans la base de données. La couche de service renverrait les objets de base avec seulement les jetons et la couche de vue rechercherait les valeurs de texte réelles en utilisant les tables Content/Translation - qui seraient fortement mises en cache. Les tables de contenu/traduction seraient également utilisées pour stocker d'autres contenus de type CMS (texte statique sur les pages web, etc.)
J'aime la première option parce que c'est essayé et vrai, mais la deuxième option semble avoir tant d'autres avantages:
- Tout mon texte/contenu localisé est en un seul endroit (facilite la traduction).
- La couche de service n'a pas vraiment besoin de se soucier des paramètres régionaux.
- Simplifie les requêtes en n'ayant pas à faire partie d'un groupe de tables de type ML.
Depuis que je ne l'ai jamais vu un dessin comme ça avant, je suppose que je dois manquer quelque chose. De bonnes raisons de ne pas le concevoir de cette façon? Ou peut-être y a-t-il une meilleure option à laquelle je n'ai pas pensé?
Pourquoi avez-vous une table de contenu? Ne pourriez-vous pas utiliser votre jeton pour rechercher directement la traduction dans la table de traduction? –
Non que je pense à cela, si les jetons ne contient que des informations comme. . pourquoi la catégorie de table aurait besoin de jeton-propriétés de toute façon ?? –
@paskster - La table de contenu est là pour éviter de dupliquer la colonne de jeton dans la table de traduction. Il y aurait beaucoup de traductions pour un jeton donné. Cela vous permet également d'avoir RI entre la table Category et la table Content si vous le souhaitez. –