在MySQL中存储翻译的更好方法

时间:2015-01-23 20:18:09

标签: php mysql database

在数据库中存储多语言字段并更新/访问它的最佳方法是什么? 我正在处理6种语言
2行和2种语言的示例

选项1:
数据库 - 1表设计:

table1.products
id --- parent -- product_name
1  ---    5   -- a:2:{s:2:"en";s:3:"dog";s:2:"cs";s:3:"pes"}
2  ---    5   -- a:2:{s:2:"en";s:3:"cat";s:2:"cs";s:5:"macka"}

更新此选项1太简单了1.将旧翻译数组与更新或新语言字段合并(PHP array_merge)
2。序列化合并数组
3。简单更新数据库。

优点:

  • 减少MySQL加入程序
  • 一张桌子,一行
  • 轻松处理多行,例如:用Y语言更新X产品



选项2:
数据库 - 2桌设计:

table1.products
id --- parent
1  ---    5  
2  ---    5  

table2.products_translations
product_id --- lang -- product_name
    1      ---  en  -- dog
    1      ---  cs  -- pes
    2      ---  en  -- cat
    2      ---  cs  -- macka

更新此选项2有点困难。

优点:

  • 更好地使用一种语言
  • 更好的数据库视图



你最想成为最好的数据库解决方案是什么意思?每个产品将包含所有语言的ifinite块文本(描述)。
谢谢

1 个答案:

答案 0 :(得分:3)

存储数据的最佳方式应该由数据的访问模式以及数据完整性的要求来定义。

您的第二个解决方案是在数据库中存储数据的更典型方式。它被规范化了。它允许您访问任何产品的任何特定语言。更重要的是,您可以添加更多语言并轻松进行更改。这将是更理想的方法。

我不担心连接的性能。通过适当的索引,这应该非常有效。

在某些情况下,第一种方法可能是可取的。例如,如果你的底层代码总是同时使用所有语言,那么可能需要将结构作为JSON'字符串数组返回,并在应用程序层中进行额外的解析。但是,以一种特定语言返回所有产品会产生很多性能开销,特别是如果您希望所有产品都以“A”开头。更新一种产品的特定语言值也很困难。

我的强烈倾向是第二种方法,除非你有第一种方法的真正,非常好的理由。

相关问题