0

我的 Web 应用程序是在 Grails 中实现的。

我的情况是我有一个包含更多列的域类(休眠类),其中一些是大字符串,最多 4000 个字符。

例如 :

String description // max 4000
// column2, column3, etc

现在我必须为这些元素实现一个多语言数据库,我的策略是为每种语言设置一个字段。

String description_en_US
String description_de_DE

我的问题是,如果我为每种语言都有一个单独的表,或者将它保存在一个大表中,是否会更有效。这个问题有两个部分。首先,如果它在加载数据时使用大内存,那么对于hibernate,哪个更有效,第二,对于数据库,哪个更有效?

以后我可能会拥有超过 10 种语言。

4

2 回答 2

1

我之前处理过类似的情况,我们有一个包含一些值的表并且需要以多种语言存储它们的翻译值。经过多次讨论和头脑风暴,我们最终确定了以下方法。

Table1: MainTable 

     id, Description, Column1, column2 ......


Tables2: MainTransTable

     id, MainTable_id (FK), Language, description_trans

所以它将是 MainTable 实体,它将具有 MainTransTable 实体的集合(一对多关系)。每个 MainTransTable 将根据 Language 列以给定语言表示 MainTable 的翻译版本

Advantages:
- In future if you want to add value for another language, then you just need to add another row in MainTransTable
- Currently you are only translating only one column. So in future if you decide to translate any other columns,  you can use same table structure with new trans column added in trans table
于 2012-10-26T10:16:19.083 回答
1

I cannot answer the question but I would strongly recommend not using a field for a language but another table with languages and references to this table. This is because if you ever have to add another language you don't have to change the structure of the existing tables but only add another row to the languages table and can use the key as foreign key in the description table. Long strings aren't the problem I think. How many entries to the description table do you expect to maintain?

于 2012-10-26T11:24:49.333 回答