在数据库中存储多语言字段并对其进行更新/访问的最佳方法是什么?
我正在处理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 JOIN程序
>一张桌子,一排
>轻松处理多行,例如:用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有点困难.
好处:
>更好地使用一种语言
>更好的数据库视图
最好的数据库解决方案是什么意思?每个产品都将包含所有语言的无限文本块(描述).
解决方法:
最好的存储数据方式应由数据上的访问模式以及对数据完整性的要求来定义.
第二种解决方案是将数据存储在数据库中的更典型方法.已标准化.它允许您访问任何产品的任何特定语言.更重要的是,您可以添加更多语言并轻松进行更改.这将是更理想的方法.
我不用担心联接的性能.使用适当的索引编制,这应该非常有效.
在某些情况下,可能需要使用第一种方法.例如,如果您的基础代码始终同时使用所有语言,则可能需要以字符串形式的JSON’ish数组形式返回结构,并在应用程序层进行其他解析.但是,以一种特定语言返回所有产品会带来很多性能开销,特别是如果您想要所有以’A’开头的产品时.同样很难为一种产品更新一种特定的语言值.