Je suis le développement d'un logiciel multilanguage. Aussi loin que le code de l'application va, adaptabilité n'est pas un problème. Nous pouvons utiliser des ressources linguistiques spécifiques et ont toutes sortes d'outils qui fonctionnent bien avec eux.
Mais quelle est la meilleure approche dans la définition d'un schéma de base de données multilingue? Disons que nous avons beaucoup de tables (100 ou plus), et chaque table peut avoir plusieurs colonnes qui peuvent être localisés (plus de nvarchar colonnes doivent être localisable). Par exemple, l'une des tables susceptible de détenir des informations sur le produit:
CREATE TABLE T_PRODUCT (
NAME NVARCHAR(50),
DESCRIPTION NTEXT,
PRICE NUMBER(18, 2)
)
Je peux penser à trois approches à l'appui du texte multilingue dans le NOM et la DESCRIPTION des colonnes:
-
Colonne séparée pour chaque langue
Quand on ajoute une nouvelle langue pour le système, nous devons créer des colonnes supplémentaires pour stocker le texte traduit, comme ceci:
CREATE TABLE T_PRODUCT ( NAME_EN NVARCHAR(50), NAME_DE NVARCHAR(50), NAME_SP NVARCHAR(50), DESCRIPTION_EN NTEXT, DESCRIPTION_DE NTEXT, DESCRIPTION_SP NTEXT, PRICE NUMBER(18,2) )
-
Traduction de table avec des colonnes pour chaque langue
Au lieu de stocker le texte traduit, seulement une clé étrangère pour les traductions table est stockée. Les traductions de la table contient une colonne pour chaque langue.
CREATE TABLE T_PRODUCT ( NAME_FK int, DESCRIPTION_FK int, PRICE NUMBER(18, 2) ) CREATE TABLE T_TRANSLATION ( TRANSLATION_ID, TEXT_EN NTEXT, TEXT_DE NTEXT, TEXT_SP NTEXT )
-
Les tables de traduction avec des lignes pour chaque langue
Au lieu de stocker le texte traduit, seulement une clé étrangère pour les traductions table est stockée. Les traductions de la table contient uniquement une clé, et une autre table contient une ligne pour chaque traduction d'une langue.
CREATE TABLE T_PRODUCT ( NAME_FK int, DESCRIPTION_FK int, PRICE NUMBER(18, 2) ) CREATE TABLE T_TRANSLATION ( TRANSLATION_ID ) CREATE TABLE T_TRANSLATION_ENTRY ( TRANSLATION_FK, LANGUAGE_FK, TRANSLATED_TEXT NTEXT ) CREATE TABLE T_TRANSLATION_LANGUAGE ( LANGUAGE_ID, LANGUAGE_CODE CHAR(2) )
Il y a des avantages et des inconvénients de chaque solution, et je voudrais savoir quelles sont vos expériences avec ces approches, que recommandez-vous et comment vous allez sur la conception d'un schéma de base de données multilingue.