设计数据库以支持多语言

14 浏览
0 Comments

设计数据库以支持多语言

我正在尝试将多语言支持引入应用程序的后端,并试图找出一种有效实现此功能的策略,以适应当前的架构。\n目前,我有多个表,其中包含标准的英文值。\n我的想法是,在每个包含英文值的表中,都包含一个与翻译表中的一个“语言”和多个“语言值”相关联的外键。\n例如:\n表1\n

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

\n表2\n

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

\n语言表\n

Lang_ID    |    Lang_Code    |    值
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"
....

\n我的想法是,只需通过WHERE Lang_ID=? AND Lang_Code=?查询语言表,即可获取特定值的翻译。\n我有几个问题想问一下:\n1)这是一个好的做法吗?\n2)如何在多个表上生成尚不存在的外键并保持每个外键的唯一性(以避免两个不同文本值的翻译落在相同的Lang_ID下)?

0
0 Comments

设计数据库以支持多语言

在设计数据库以支持多语言时,我们需要解决以下两个问题:原因和解决方法。

问题的原因:

1. 需要存储多语言翻译的字符串值。

2. 需要为每个字符串值生成唯一的标识符。

解决方法:

1. 创建一个单独的表用于存储翻译。

2. 使用序列生成唯一的标识符。

首先,我们可以使用一个单独的表来存储翻译。这样做的好处是可以将翻译与原始字符串值分开存储,使得数据库的结构更清晰。即使默认的英文值也可以存储在翻译表中。

其次,我们可以将语言代码存储在一个单独的表中。这样做的好处是可以方便地管理语言代码,但在实际应用中可能没有特别需要使用语言代码的情况。因此,建议将语言代码保留在原始表中。

对于唯一标识符的生成,可以使用序列来实现。以下是一个示例代码,可以在插入新的翻译字段时使用:

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

在插入新的翻译字段时,可以使用`next_val('sequence_name')`来生成唯一的键。每次调用`next_val('sequence_name')`时,都会返回下一个可用的整数作为该字符串字段的键。第一次调用将返回1,第二次调用将返回2,依此类推。

总之,为了支持多语言,我们可以使用一个单独的表来存储翻译,使用序列来生成唯一的标识符。这样可以更好地组织数据库结构,并且方便地管理多语言翻译。

0