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


Why is the Relation Between a Configurable Product and a Simple Product Stored Twice?

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

当您在Magento中创建可配置产品,然后创建子简单产品来实现诸如衬衫尺寸,颜色等内容时,Magento将此关系存储在两个单独的表中。

catalog_product_relation
catalog_product_superlink_table

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

这是遗留代码,还是在产品关系链接和产品"超级链接"链接之间存在语义上的区别?

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

为什么是一个很好的问题。catalog_product_super_link表只包含与可配置产品相关的数据。catalog_product_relation除了可配置的关系外,还包含了捆绑和分组产品的关系信息。

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

相比之下,catalog_product_relation表由非特定于可配置产品的类使用,如抽象目录产品索引器类。

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

这只是一个猜测——我还没有证实,也没有和"知道"的人交谈过(mental-note-for-imagine)