Как разработать схему базы данных для хранения текста на нескольких языках? - PullRequest
5 голосов
/ 29 марта 2010

У нас есть база данных PostgreSQL. И у нас есть несколько таблиц, которые должны хранить определенные данные на нескольких языках (к счастью, список возможных языков определен для всей системы).

Например, давайте начнем с:

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

Теперь давайте сделаем это многоязычным. Как насчет:

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

Это было бы хорошо для полнотекстового поиска в Postgres. Просто добавьте столбец tsvector за каждый язык.

Но оптимально ли это? Может быть, мы должны использовать другую таблицу, чтобы сохранить переводы? Как:

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

Может быть, просто может быть, мы должны использовать что-то еще - что-то из мира SQL? Любая помощь приветствуется.

Ответы [ 2 ]

1 голос
/ 29 марта 2010

Я думаю, что лучше, если вы создадите две таблицы. Один для языков, один для идентификаторов и так далее. first_table (id) second_table (s_id, id_first_table, language_id, language_text)

0 голосов
/ 29 марта 2010

Вот отличная статья, которую разработчики Mozilla собрали, чтобы сделать свою базу данных многоязычной. Это специфично для CakePHP, но информация может быть легко применена к другим системам. Также обратите внимание, что это делает запросы SQL значительно более сложными, что является недостатком. Это, как правило, верно независимо от вашей реализации i18n.

  1. Часть 1
  2. Часть 2
  3. Часть 3
...