我们目前使用的翻译表如下所示:
| id | type | name | lang | value |
|-----+-------+----------+-------+----------|
| 853 | text | question | en | question |
| 854 | text | question | nl | vraag |
因此,对于另一种语言的额外翻译,我们必须添加另一行
正在考虑将其更改为具有每个国家/地区值的列的表(因此您只需要添加1行)。
所以它看起来像这样:
| id | type | name | lang | nl | en |
|-----+-------+----------+-------+---------+------------+
| 853 | text | question | en | vraag | question |
答案 0 :(得分:3)
为什么不加入两个表,掌握一个id,type,name
字段并与id,master_id,lang,value
嵌套。对于给定的示例,它将如下所示:
ID TYPE NAME
1 text question
ID MASTER_ID LANG TRANSLATION
1 1 en question
2 1 nl vraag
一种语言的翻译集由SQL查询提供:
SELECT * FROM `nested` WHERE `lang` = 'nl'
-- vraag
-- .....
给定字词的翻译(例如question
,id=1
}:
SELECT * FROM `nested` WHERE `master_id` = 1 AND `lang` = 'nl'
-- vraag
答案 1 :(得分:1)
第二个想法的缺点是,对于要添加的每种新语言,您必须更改数据库结构(遵循代码更改以反映结构更改),而第一个只需要新行(保持相同的结构)
第一个想法的另一个好处是你真的只需要空间/内存来添加到数据库中的翻译。在第二种方法中,如果你不能翻译所有文本,你可以有很多空字段。
一种方法可以(从@mudasobwa上面的答案中添加):
Master Table:
| id | type | master_name |
|----+------+-------------|
|853 | text | question |
|854 | text | answer |
Language Table:
| id | language_name |
|----+---------------|
| 1 | english |
| 2 | german |
Translation Table:
| id | master_id | language_id | translation |
|----+-----------+-------------+--------------------|
| 1 | 853 | 1 | question |
| 1 | 854 | 2 | Frage |
| 2 | 853 | 1 | answer |
| 2 | 854 | 2 | Antwort |
因此,如果您有其他语言,请将其添加到语言表中,并为该语言的主文本添加翻译。
向id添加索引将有助于加快对文本的查询。
答案 2 :(得分:0)
第二种方式要好得多: