正确制作翻译表的方法?

时间:2014-07-17 13:57:20

标签: php mysql sql translation

我们目前使用的翻译表如下所示:

|  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   |
  • 与第二种方式相比,是否有任何缺点 第一?
  • 您如何建议创建一个转换表 此?

3 个答案:

答案 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
-- .....

给定字词的翻译(例如questionid=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)

第二种方式要好得多:

  • 在数据库中保留较少的位置。
  • 加载速度更快。
  • 易于编辑。