Как разработать схему базы данных для хранения текста на нескольких языках?

У нас есть база данных 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? Любая помощь приветствуется.


person stach    schedule 28.03.2010    source источник
comment
Возможный дубликат схемы для многоязычной базы данных   -  person EstevaoLuis    schedule 31.05.2017


Ответы (2)


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

person Luka    schedule 28.03.2010
comment
Вот как я пытался это сделать до сих пор. Но я застрял на индексах полнотекстового поиска. Если бы у меня были встроенные столбцы lang (как в первом примере), я мог бы легко создать для них цвекторы. Со второй схемой это сложнее и (я думаю) невозможно, когда fts-index должен быть связан с конкатенацией двух столбцов. - person stach; 29.03.2010

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

  1. Часть 1
  2. Часть 2
  3. Часть 3
person Matt Huggins    schedule 28.03.2010
comment
Последняя ссылка - единственная, где есть контент, касающийся моделирования данных. - person OMG Ponies; 29.03.2010