【发布时间】:2010-07-12 11:11:39
【问题描述】:
很快我将致力于支持多语言内容的目录(php+mysql)。现在我正在考虑设计数据库结构的最佳方法。目前我看到了 3 种多语言处理方式:
1) 每种语言特定的数据都有单独的表格,即大致如下所示:
- 将有一个表 Main_Content_Items,存储无法翻译的基本数据,如 ID、creation_date、hits、votes 等 - 它只有一个表,并且将引用所有语言。李>
以下是针对每种语言复制的表格:
- Common_Data_LANG 表(示例:common_data_en_us)(存储可翻译的通用/“静态”字段,但存在于任何目录项中:标题、描述等...)
- Extra_Fields_Data_LANG 表(存储可以翻译的额外字段数据,但对于自定义项目组可能不同,例如:| id | item_id | field_type | value | ...) 然后根据项目请求,我们将根据用户/默认语言在表中查找,并将可翻译数据与 main_content 表连接。
优点:
- 我们可以更新最常更新的“主要”数据(即点击次数、投票数...),只需一次查询即可
- 如果我们有 4 种或更多语言,与仅使用一个带有“lang”字段的表的结构相比,我们不需要重复数据 4 倍或更多次。因此,MySql 查询将花费更少的时间来通过 100000(例如)记录目录而不是 400000 或更多
缺点:
- +2 每种语言的表格
2) 在内容表中使用“lang”字段:
- Main_Content_Items 表(存储无法翻译的基本数据,如 ID、creation_date、hits、votes 等...)
- Common_Data 表(存储可翻译的通用/“静态”字段,但存在于 eny 目录项中:| id | item_id | lang | title | desc | 等等...)李>
- Extra_Fields_Data 表(存储可以翻译的额外字段数据,但对于自定义项目组可能不同,例如:| id | item_id | lang | field_type | value | ...) 所以我们会根据 'lang' 字段将 common_data 和 extra_fields 加入到 main_content_items 中。
优点:
- 我们可以更新最常更新的“主要”数据(即点击次数、投票数...),只需一次查询即可
- 我们只有 3 个表格用于内容数据
缺点:
- 我们有 custom_data 和 extra_fields 表填充了所有语言的数据,因此它的 X 倍更大并且查询运行速度更慢
3) 与第二种方式相同,但 Main_Content_Items 表与 Common_Data 合并,具有“lang”字段:
优点:
- ...?
缺点:
- 我们需要更新更新的“主要”数据(即点击次数、投票数...),这些数据更新频率最高,适用于每种语言
- 我们有 custom_data 和 extra_fields 表填充了所有语言的数据,因此它的 X 倍更大并且查询运行速度更慢
很高兴听到有关“什么更好”和“为什么”的建议?还是有更好的方法?
提前谢谢...
【问题讨论】:
标签: php mysql multilingual catalog custom-fields