[电子商务网站设计] 之 分类目录
分类目录作为电子商务网站的重要入口之一,设计好坏直接关系到网站的性能。
网上大多数相关的例子都采用树(森林)状结构。
这种经典结构却并不适合电子商务网站使用,我们分析一下分类目录的使用场景。
1. 分类导航。
2. 分类搜索。
3. 分类统计。
问题就出在分类搜索和分类统计上,这两个需求都需要检索分类及其所有层次的子分类,采用树(森林)状结构时不可避免需要进行递归操作,那么对于操作性能自然有所影响,且分类搜索的使用量非常巨大,因此也会拖累整个网站的性能。
那么合理的分类目录应该采取什么样的结构呢?看一个例子。
这样的结构除了可以清晰地表达分类目录之间的父子关系,最重要的是可以避免递归操作,我们使用 "like 'A01*'" 即可完成"电视"及其所有子类的搜索和统计。当然这种分类结构不能做到树(森林)状结构的无限层次,但大多数网站也不可能有那么多的分类内容,每级 99 个分类容量足以满足要求。
另外此种编码方式对于日常维护也有好处,我们不需要记住一堆不相干的数字,也避免了数据迁移时自增编号变化带来的麻烦。
网上大多数相关的例子都采用树(森林)状结构。
Id: 分类编号,自增整数。
Name: 分类名称
ParentId: 父分类编号
Name: 分类名称
ParentId: 父分类编号
这种经典结构却并不适合电子商务网站使用,我们分析一下分类目录的使用场景。
1. 分类导航。
2. 分类搜索。
3. 分类统计。
问题就出在分类搜索和分类统计上,这两个需求都需要检索分类及其所有层次的子分类,采用树(森林)状结构时不可避免需要进行递归操作,那么对于操作性能自然有所影响,且分类搜索的使用量非常巨大,因此也会拖累整个网站的性能。
那么合理的分类目录应该采取什么样的结构呢?看一个例子。
A01 电视
A01B01 普通电视
A01B02 液晶电视
A01B03 平板电视
A02 电脑
A02B01 台式机
A02B02 笔记本
A02B02C01 IBM
A02B02C02 Lenovo
A02B02C03 AUSU
A03 家电
...
A01B01 普通电视
A01B02 液晶电视
A01B03 平板电视
A02 电脑
A02B01 台式机
A02B02 笔记本
A02B02C01 IBM
A02B02C02 Lenovo
A02B02C03 AUSU
A03 家电
...
这样的结构除了可以清晰地表达分类目录之间的父子关系,最重要的是可以避免递归操作,我们使用 "like 'A01*'" 即可完成"电视"及其所有子类的搜索和统计。当然这种分类结构不能做到树(森林)状结构的无限层次,但大多数网站也不可能有那么多的分类内容,每级 99 个分类容量足以满足要求。
另外此种编码方式对于日常维护也有好处,我们不需要记住一堆不相干的数字,也避免了数据迁移时自增编号变化带来的麻烦。