为什么可配置产品和简单产品之间的关系存储了两次?

Ala*_*orm 28 php mysql magento

深入探讨Magento内部,而不是寻找具体问题的解决方案,只是试图了解一些实现细节.

当您在Magento中创建可配置产品,然后创建子简单产品以实现衬衫大小,颜色等内容时,Magento将此关系存储在两个单独的表中.

catalog_product_relation
catalog_product_superlink_table
Run Code Online (Sandbox Code Playgroud)

为什么这些关系存储了两次?

这是遗留代码,还是产品关系链接和产品"超链接"链接之间存在语义差异?

系统是否期望它们相同,或者这些表是否代表不同的父/子关系是有效的对象状态?

Vin*_*nai 30

为什么这是个好问题.该catalog_product_super_link表仅包含与可配置产品相​​关的数据.catalog_product_relation除了可配置的关系之外,还包含捆绑和分组产品的关系信息.

围绕可配置产品的所有业务逻辑都参考catalog_product_super_*表格,例如查找可配置产品的可配置属性和价格更新.

catalog_product_relation相比之下,表格不是特定于可配置产品的类,如抽象目录产品索引器类.

似乎Magento核心团队希望将逻辑上不同的功能分离到不同的PHP类中,而且还分离到单独的数据库表中.可能的优势?我想从理论上讲这种方式更容易改变可配置的产品实现而不会中断索引器的实现.

这只是一个猜测 - 我还没有确认或与"知道"的人交谈(心理记录为想象)

  • 一切都更简单.当没有关系索引时,开发了可配置类型的产品.它甚至是第一种复合产品类型.当然它当时有自己的桌子.一旦创建了更多复合材料,就会创建关系表以统一检索子/父产品的逻辑,以获取索引和需要的其他功能. (19认同)