2010-03-28 3 views
4

Nous avons une base de données PostgreSQL. Et nous avons plusieurs tables qui ont besoin de garder certaines données dans plusieurs langues (la liste des langues possibles est heureusement définie à l'échelle du système).Comment concevoir un schéma de base de données pour stocker du texte dans plusieurs langues?

Par exemple Commençons par:

create table blah (id serial, foo text, bar text); 

Maintenant, nous allons le rendre multilingue. Que diriez-vous:

create table blah (id serial, foo_en text, foo_de text, foo_jp text, 
           bar_en text, bar_de text, bar_jp text); 

Ce serait bon pour la recherche de texte intégral dans Postgres. Ajoutez simplement une colonne tsvector pour chaque langue.

Mais est-ce optimal? Peut-être devrions-nous utiliser une autre table pour conserver les traductions? Comme :

create table texts (id serial, colspec text, obj_id int, language text, data text); 

Peut-être, juste peut-être, nous devrions utiliser quelque chose d'autre - quelque chose du monde SQL? Toute aide est appréciée.

+0

en double possible de [schéma pour une base de données multilangue] (https://stackoverflow.com/questions/316780/schema-for-a-multilanguage- base de données) – EstevaoLuis

Répondre

0

Voici un excellent article que les développeurs de Mozilla ont mis en place pour rendre leur base de données multilingue. C'est spécifique à CakePHP, mais l'information peut facilement être appliquée à d'autres systèmes. Notez également qu'il rend les requêtes SQL beaucoup plus complexes, ce qui est un inconvénient. Ce sera généralement vrai indépendamment de votre mise en œuvre i18n, cependant.

  1. Part 1
  2. Part 2
  3. Part 3
+0

Le dernier lien est le seul avec du contenu concernant la modélisation de données. –

1

Je pense qu'il est préférable si vous créez deux tables. Un pour les langues, un pour les ids et ainsi de suite. first_table (id) second_table (S_ID, id_first_table, language_id, language_text)

+0

Voilà comment j'ai essayé de le faire jusqu'à présent. Mais je suis coincé sur les index de recherche de texte intégral. Si j'avais les colonnes de lang en ligne (comme dans le premier exemple) je pourrais facilement créer des tsvectors pour eux. Avec le second schéma, cela est plus difficile, et (je pense) impossible lorsque l'index fts doit être sur la concaténation de deux colonnes. – stach

Questions connexes