gpt4 book ai didi

mysql - 处理多态关联 : is there such a thing as "too many" LEFT JOIN?

转载 作者:搜寻专家 更新时间:2023-10-30 20:03:55 25 4
gpt4 key购买 nike

我有十个表(Product_A、Product_B、Product_C 等),每个表都有一个主键指向父表 Product 中的一行。

基本上,我已经应用了 Bill Karwin 的 SQL 反模式书中的建议(这里描述的这个反模式解决方案: https://fr.slideshare.net/billkarwin/practical-object-oriented-models-in-sql/34-Polymorphic_Assocations_Exclusive_Arcs_Referential )

为了加载子产品,我使用了这样的东西:

SELECT * FROM Product
LEFT JOIN Product_A USING (product_id)
LEFT JOIN Product_B USING (product_id)
LEFT JOIN Product_C USING (product_id)
LEFT JOIN Product_D USING (product_id)
WHERE product_id = 1337
etc.

我担心我获得的子表产品类型越多,我必须添加的 JOIN 子句就越多,导致查询最终变得异常缓慢。

如果我们处理数十个子表,使用 LEFT JOIN 来防止多态关联反模式是否仍然是一种解决方案?

我是否应该开始考虑使用对父表 Product 的查询来获取“product_type”,然后根据存储在父表“product_type”列中的值对适当的子表执行另一个查询?

更新:关于这个主题的第一个回复指出这是糟糕的设计,我应该创建一个合并子表中的列的表。但是每种产品类型都有自己的属性。换句话说:“电视可能有像素数,但这对 blender 来说意义不大。” @TomH

谢谢

最佳答案

MySQL 对连接数有一个硬性限制。限制是 61 个连接,并且它是不可配置的(我查看了源代码,它实际上只是硬编码)。因此,如果您有超过 62 种产品类型,这将无法在单个查询中使用。

如果数据存储在您描述的结构中,我会针对每种产品类型运行单独的查询,这样您就不会进行太多的连接。

或者先对 Product 表进行查询,然后在需要详细信息时对特定于产品类型的表进行其他查询。

例如,您什么时候需要一次收集所有特定于产品的详细信息?在某种搜索页面上?您是否认为可以将代码设计为在搜索页面上仅显示主 Product 表中的属性?

只有当用户点击特定产品时,您才会转到另一个页面以显示详细信息。或者如果不是不同的页面,它可能是动态 HTML 内容,您可以在其中展开“+”按钮以获取详细信息,并且每次执行此操作时,都会运行 AJAX 请求以获取详细信息。

关于mysql - 处理多态关联 : is there such a thing as "too many" LEFT JOIN?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44955015/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com