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

sta*_*ach 5 postgresql internationalization database-schema

我们有一个PostgreSQL数据库.我们有几个表需要将某些数据保存在多种语言中(幸运的是,系统范围内定义了可能的语言列表).

例如,让我们从:

create table blah (id serial, foo text, bar text);
Run Code Online (Sandbox Code Playgroud)

现在,让我们多语言.怎么样:

create table blah (id serial, foo_en text, foo_de text, foo_jp text,
                              bar_en text, bar_de text, bar_jp text);
Run Code Online (Sandbox Code Playgroud)

这对Po​​stgres的全文搜索很有用.只需为每种语言添加一个tsvector列.

但它是最佳的吗?也许我们应该使用另一张表来保存翻译?喜欢:

create table texts (id serial, colspec text, obj_id int, language text, data text);
Run Code Online (Sandbox Code Playgroud)

也许,只是也许,我们应该使用其他东西 - 来自SQL世界的东西?任何帮助表示赞赏.

Mat*_*ins 0

这是 Mozilla 开发人员撰写的一篇精彩文章,内容涉及如何使他们的数据库实现多语言化。它特定于 CakePHP,但该信息可以轻松应用于其他系统。另请注意,它使 SQL 查询变得更加复杂,这是一个缺点。不过,无论您的 i18n 实现如何,这通常都是正确的。

  1. 第1部分
  2. 第2部分
  3. 第三部分