如何设计用于以多种语言存储文本的数据库模式?

时间:2010-03-28 21:30:29

标签: postgresql internationalization database-schema

我们有一个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 个答案:

答案 0 :(得分:1)

我认为最好创建两个表。一个用于语言,一个用于ID,等等。 first_table(id) second_table(s_id,id_first_table,language_id,language_text)

答案 1 :(得分:0)

这是一篇很棒的文章,Mozilla开发人员将他们的数据库用于多语言。它特定于CakePHP,但信息可以很容易地应用于其他系统。另外,请注意,它使SQL查询显着更复杂,这是一个缺点。不管你的i18n实现如何,这通常都是正确的。

  1. Part 1
  2. Part 2
  3. Part 3