多语言应用的数据库设计问题

时间:2011-04-03 06:35:47

标签: database database-design internationalization application-design

我们正在开发一个旅游门户网站和一个旅游门户网站,其内容和详细信息是我们的心脏。我们计划将其置于多个区域设置中,这意味着我们需要处理每个区域设置的动态数据。

目前我们有以下表格

Destination
Transport
Places of Interests
user comments etc.

每个表都包含很多字段,如

Name
ShortDescription
LongDescription 

以及许多其他可能包含大量数据的字段,我们需要以特定于语言环境的方式处理数据。

我不确定我们如何最好地设计应用程序来处理这种情况,我想到的一件事就是为每个表中的每个语言环境添加额外的列,但这意味着需要从数据库更改新的语言环境代码级别,并不是很好。

由于每个表都包含很多列,这些列可以包含符合国际化条件的数据,所以我的问题是处理这种情况的最佳方法

EDIT1 在做了一些分析和一些令人难以置信的方法后,我想到了如下..

我打算为每个表创建一个转换表 喜欢目的地我有以下设计

    table languages
    -- uuid (varchar)
    -- language_id(varchar)
    -- name (varchar)  

    table Destination
    --uuid (varchar)
     other fields which are not part of internationalization.

table Destination_translation
-- id (int)
-- destination_id (int)
-- language_id (int)
-- name (text)
-- description(text) 

对上述方法的任何有价值的建议都是最受欢迎的......

2 个答案:

答案 0 :(得分:1)

以前国际化应用程序时,我们有一个基于区域设置的值表。所以,我们做了类似的事情:

创建一个名为local_strings的表,由string_code,locale_code,value组成。这包含各种值的翻译。因此,如果您已翻译成三种语言,则每个string_code将有三个具有不同locale_codes的条目。

然后,每个主表(在您的案例目的地,传输等)都引用了local_strings表中的string_code。

最后,在从数据库中查询值时,只需确保始终加入local_strings表并始终使用用户的当前语言环境。或者,您可以将这些值缓存在内存中,这样您就不会总是与此表连接。但是,根据我的经验,表格永远不会那么大,所以加入它的开销并不大。

答案 1 :(得分:0)

有几种方法可以解决这个问题:

  1. 按区域设置列扩展表,并在每个查询中包含区域设置。您甚至可以修改索引以包含区域设置列。
  2. 为lokalized字符串创建单独的表
  3. 我绝对赞成选项1,因为它使表格看起来仍然像真实的东西,他们仍然可以通过直接查看数据来阅读。它还可以防止您进行子选择或连接,这有助于提高性能。 选项2的优点是管理界面的程序员(如果有的话)更容易。