设计数据库以支持多语言

时间:2019-05-09 14:50:58

标签: sql database postgresql database-design

我正在尝试将多语言支持引入应用程序的后端,并试图找到一种策略,以有效地将其实现到当前模式中。

我目前有多个表,所有表都包含标准的英语值。

我的想法是在每个带有英文值的表格中,包括一个外键,该外键与保存翻译的表格中的单个“语言”和多个“语言值”相关联

因此,例如。

表1

Value     |    Lang_ID
"This is a sentence"    |    1
"This is also a sentence"    |    2
"Translate this"    |    3

表2

Value     |     Lang_ID
"This is a sentence from another table"    |    4
"This table is different from table-1"    |    5

语言表

Lang_ID    |    Lang_Code    |    Value
1    |    "ZHO"    |    "这是一句话"
1    |    "SPA"    |    "esta es una frase"
2    |    "FRA"    |    "c'est aussi une phrase"
3    |    "SPA"    |    "traduce esto"
4    |    "FRA"    |    "ceci est une phrase d'un autre tableau"
....

我的想法是,您只需要通过WHERE Lang_ID =查询语言表? AND Lang_Code =?以获得该特定值的翻译。

我想知道几件事

1)这是一个好习惯吗?

2)如何生成在多个表中尚不存在的外键,并使每个外键保持唯一(以免两个不同文本值的翻译不属于同一Lang_ID)

1 个答案:

答案 0 :(得分:0)

使用另一个表存储翻译是一个好主意。我在个人工作中已经使用了它。就我而言,我从一开始就设计了翻译,因此我的表中没有字符串值,即使默认的英语值也位于翻译表中。

我也将语言代码放在一个单独的表中,尽管我从未发现需要它的情况,因此我建议您将它们保留在原处。

对于唯一ID,我建议使用类似的序列(无耻地被盗here):

create sequence sequence_name
    start 1
    increment 1
    NO MAXVALUE
    CACHE 1;

并在插入新字段进行翻译时使用next_val('sequence_name')