1
6
你可以用 物化道路 设计。目录路径是物化路径的一个例子。也就是说,串联在一起的一系列祖先值,用一些字符(“/”或“,”是常见的)分隔它们。 因此,您可能有以下类别:
现在,如果您想要所有音频下的产品,可以执行如下查询:
例如,
关于菜单渲染的问题是:我想您希望菜单渲染: -所选类别的所有祖先 -所选类别的祖先的所有兄弟姐妹 所以如果你选择“扬声器”,你会看到:
但你不想要电脑或数码相机的后代(例如,扬声器的“表亲”)。
我使用一个技巧来检测叔叔:在剥离最后一个元素后比较路径。要执行此操作,请反转字符串,然后剥离
第一
元素。这至少在MySQL和MS SQL Server中有效,但是
请注意,对于
|
2
1
从性能的角度来看,这是一个糟糕的设计。如果客户不小心单击了TopPermost类别,您将执行整个库存的查询。这可能需要不可接受的时间。用网络术语来说,这意味着客户失去耐心,点击对手的网站,然后 不再访问您的网站 . 当然,过早的优化是万恶之源,但最好避免做完全愚蠢的事情。 我也会把树导航的整个概念作为一种方法来考虑。让你的客户玩一个“猜猜我们如何清点库存”的游戏有点过分。除其他外,在许多领域中,产品可以属于多个类别,因此在层次结构中拟合它们是一个任意的过程。至少您应该有一个支持将产品分配给多个叶类别的数据模型。(这可能取决于您所销售产品的性质和类别的粒度)。 如果你的老板坚持他们的方式,那么你仍然有一些选择来提高查询的性能。例如,您可以有一个表,其中包含由所有父类别联接的所有产品…
您必须通过触发器、物化视图或其他机制(取决于您的数据库风格)来维护它。但是,与不必为每个客户查询重新组装产品层次结构的性能优势相比,维护它的开销是可忽略的。此外,你的库存不太可能有这么大的波动性。 |
NASEEM FASAL · 如何跟踪用户兴趣并根据他们的兴趣显示产品 6 年前 |
Yusuf Erdem · “+{}using”命名空间标记未出现 7 年前 |
Raju · Hadoop与电子商务门户的集成 7 年前 |
FoamyMedia · 如何修复页面一半以下的网页负载 7 年前 |
iagowp · 为什么我的谷歌分析电子商务转账没有注册? 7 年前 |
swinn · Javascript Buy SDK-错误:未找到 7 年前 |
Sid Heart · 如何在Laravel中减去或抽象购物车数量 7 年前 |