建立合理的商品类与导航类
作者:abin 时间:2004.10.12 出处:http://blog.csdn.net/abinstudio
一个电子商务网站核心就是商品目录,商品目录可以分成两个部分:1.商品分类、2.导航类。如果商品导航与分类没有做好,用户在你的站点上找不到需要的商品(这个商品你有销售),这是最失败的事情。
商品分类基本要求:
1:灵活
2:可以伸缩
3:可靠
4:速度快
其实这几个要求互相制约,因为一个高度灵活的分类会在可靠性上有所损失,可伸缩性越高速度就越低。这里以程序员的角度出发进行折中处理。
很多时候认为商品目录应该是可以无限级别的,我也曾经这样认为,但是在最近一个电子商务网站的开发中发现其实这样是很不理想的,因为无限级别的分类导致系统资源的大量占用,为了解决不足,我把ASP.NET中的产品目录缓存在内存中,速度问题基本得到解决,但确占用了大量内存。因此不得不面对一次折中考虑,因为大多数中小型电子商务企业都采用虚拟主机,这就要求网站要有足够的执行效率,不然功能在好的网站都是垃圾。
下面据一些实际的分类例子:
珠宝首饰/手表/眼镜 > 藏饰、其他民族饰品 > 项链、项坠
珠宝首饰/手表/眼镜 > 宝石类饰品 > 戒指、指环
电脑/软件/网络/办公 > 全新笔记本电脑 > IBM
电脑/软件/网络/办公 > 电脑外设 > 打印机
电脑/软件/网络/办公 > 台式电脑 > 联想
电脑/软件/网络/办公 > 掌上电脑/PDA > 惠普/iPAQ
电脑/软件/网络/办公 > 耗材 > 打印纸
电脑/网络/办公设备 > 全新笔记本电脑 > 联想
电脑/网络/办公设备 > 电子辞典/电子书 > 文曲星
电脑/网络/办公设备 > 服务器/工作站/网络 > 网卡
计算机综合 >> 台式整机 >>联想
计算机综合 >> 存储设备 >> 移动硬盘
计算机综合 >> 工作站 >> HP
以上是几个大型B2C于C2C网站商品分类的摘抄,也是大家熟悉的分类形式,下面开始分析:
在我写前几套电子商务网站系统的时候犯过一个错误,这个错误是一个经验问题。
表面上看以上的商品都是分成三类,关系是从大到小依次。因此在设计数据库的时候就像这个样子:
以 “计算机综合 >> 台式整机 >>联想”为例子
--------------------------------------------------------------------------------
CategoryId Description ParentCategoryId
1 计算机综合 NULL
2 台式整机 1
3 联想 2
--------------------------------------------------------------------------------
看上去很合理,因为数据库是自己设计的,感觉一点问题都没有,逻辑也很正确,导航类与商品分类在一起,即实现了商品导航,也实现了商品分类。但是当网站开始使用的时候问题就来了,网站管理人员告诉我类很难分,经常容易弄错(人的逻辑思维对二级分类很灵活,而对三级确很笨拙)。另外,由于采用上面的三级分类,在编写程序的时候难度也增加,首先是存储过程,在模拟的好几百个类别中明显感觉到效率变低的很厉害(因为每次读取二级目录的时候都要遍历读取第三级目录),更重要的是在设计商品导航的时候变得死板,如果想更改一个导航名称就需要更改所有的商品所属类。
再次坐下来分析问题,解决上面的缺陷。其实“计算机综合 >> 台式整机 >>联想”这个分类中可以看成是二级分类,即“台式整机 >>联想”而不是三级。二级目录大家都知道是非常容易实现的,如下:
--------------------------------------------------------------------------------
CategoryId Description ParentCategoryId
1 台式整机 NULL
2 联想 1
3 存储设备 NULL
4 移动硬盘 3
5 工作站 NULL
6 HP 5
--------------------------------------------------------------------------------
只要ParentCategoryId为NULL的就是主目录,不为NULL的就是次级目录,在使用存储过程读取的时候也简单很多,不需要遍历第三级,效率自然很高了,再加上使用ASP.NET的缓存技术,在读取商品分类的时候先判断缓存中是否有分类,如果有就从分类读取,如果没有就从数据库读取,这样速度问题解决。但是二级分类是无法满足商品分类导航的,为了方便客户找到自己需要的商品,解决办法是再添加两个表,叫“CatalogLists”“CatalogListItems”用处是引用相关的类到这个表中,先看看表结构:
---------------------------------------------------------------------------------
CatalogLists:
CatalogListId Description
1 计算机综合
2 手机综合
3 办公设备
---------------------------------------------------------------------------------
CatalogListItems:
CatalogListItemId CategoryId CatalogListId AdminDescription
1 1 1 计算机综合类
2 3 1 计算机综合类
3 5 1 计算机综合类
---------------------------------------------------------------------------------
通过以上三个表,实现了二级目录与导航类的实现,总的效果看起来就是三级目录,操作过程是这样的:
首先读取导航目录清单CatalogLists,然后读取引用表中的CategoryId ,进而读取相应二级的分类。而在商品导航设计时变的非常简单,只要读取CatalogLists,任何一个商品导航名称的变化也只要更改CatalogLists这一个表中的名称(商品导航名称的变化在电子商务网站中时常出现,如因为节假日促销等等原因)
总结,从表的结构复杂了不少,但是在SQL语句编写的时候确不复杂,导航栏的设计也灵活了,可以随时变化与添加,由于只有一个表,效率自然很高。
本文地址:http://com.8s8s.com/it/it31376.htm