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

数据库中存储多语言字段并对其进行更新/访问的最佳方法是什么?
我正在处理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’开头的产品时.同样很难为一种产品更新一种特定的语言值.

我的强烈意愿是第二种方法,除非您有第一种方法的确实非常好的理由.

相关文章

统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
前言 之前做了微信登录,所以总结一下微信授权登录并获取用户...
FastAdmin是我第一个接触的后台管理系统框架。FastAdmin是一...
之前公司需要一个内部的通讯软件,就叫我做一个。通讯软件嘛...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...