产品分类检索解决方案(基于数据库)
2014-08-15 15:13
281 查看
问题背景:
按照分类存取产品,并且产品分类可变更,要求可以根据分类检索到相应产品,当遇到多维度分类时不易于实现,具体如下:
分类信息如下:
******** 第1级(总分类)***** 第2级(服务项目) *****第3级(分类方式)***** 第4级 ******************************************
-----------汽车美容
-------------------------------------洗车
-------------------------------------------------------------------洗车方式
----------------------------------------------------------------------------------------------人工洗车
----------------------------------------------------------------------------------------------自动洗车
-------------------------------------------------------------------价格区间
----------------------------------------------------------------------------------------------0-30
----------------------------------------------------------------------------------------------31-50
----------------------------------------------------------------------------------------------51-70
----------------------------------------------------------------------------------------------71以上
-------------------------------------------------------------------(其他)
-------------------------------------打蜡
-------------------------------------------------------------------品牌
----------------------------------------------------------------------------------------------3M
----------------------------------------------------------------------------------------------龟牌
----------------------------------------------------------------------------------------------(其他)
-------------------------------------------------------------------价格区间
----------------------------------------------------------------------------------------------0-50
----------------------------------------------------------------------------------------------51-100
----------------------------------------------------------------------------------------------101-150
----------------------------------------------------------------------------------------------151-200
----------------------------------------------------------------------------------------------151以上
-------------------------------------------------------------------(其他)
-------------------------------------(其他)
-----------汽车装饰
---------------------------------玻璃贴膜
---------------------------------底盘装甲
-----------(其他)
**********************************************************************************************************
要求可以按“查询所有”,“服务项目=洗车”, “服务项目=洗车 & 洗车方式=人工洗车”, “服务项目=洗车 & 洗车方式=人工洗车 & 价格区间=0-50” 等查找对应产品服务
难点在于如何查询按方式 “服务项目=洗车 & 洗车方式=人工洗车”,“服务项目=洗车 & 洗车方式=人工洗车 & 价格区间=0-50” 等这样的复合条件检索,因为第二级分类之后,分类维度变高,不易于检索
我的解决方案是:
分类表GoodsClassify:
这样运用静态链表可以存取分类结构
商品表Goods:
其中classify1st可以按总分类属性查询对应商品
其中classify2nd可以按服务项目属性查询对应商品【为了加快查询速度,可以在(classify1st,classify2nd)上建立复合索引】
这样可以存放商品主要信息,但那些多维度分类信息就不好存了
思路:
为了解决前面所提出的“难点”
我为每个服务项目(第2级分类)建立独立的分类索引表,考虑到服务项目的不确定性,我用触发器建完成这份工作,
也就是
1. 当我在“汽车美容”(第1级分类)下添加“洗车”(第2级分类)时,用建立在表GoodsClassify上的促发器创建一个新表(表名为“洗车”),
2. 当我再向“洗车”(第2级分类)下添加“洗车方式”(分类方式)时,用建立在表GoodsClassify上的促发器在名为“洗车”的表中添加新列(列名为“洗车方式”),
类似,向“洗车”(第2级分类)下添加“价格区间”(分类方式)时,用建立在表GoodsClassify上的促发器在名为“洗车”的表中添加新列(列名为“价格区间”),
如此类推......
3.当我向“洗车方式”(第3级分类)下添加“人工洗车”
******我们的促发器是这样的
现在进行如下几部测试看下效果:
1. 执行:
结果:
2. 执行:
结果:
执行:
3.将第4级分类插入goodsclassify表中
说明:
这样就解决了不同的服务项目具有不同的分类方式,并且这种分类方式的数目不确定这一问题
解决存:
添加一项产品时,将基本信息存放在Goods表中,
将第二级分类之后的分类信息存放在对应的服务项目分类表中,用goodsId建立了关系
解决取:
按照条件 :“查询所有” 可以直接在Goods表中检索
按照条件 :服务项目=“洗车” 可以直接在Goods表中检索
按照条件 : 服务项目=“洗车” & 洗车方式=“人工洗车” ” 可以在洗车表里检索
按照条件 : 服务项目=“洗车” & 洗车方式=“人工洗车” & 其他属性=“某某某” 可以在洗车表里检索
备注,为了加快检索速度,可以在某些列上建立索引
按照分类存取产品,并且产品分类可变更,要求可以根据分类检索到相应产品,当遇到多维度分类时不易于实现,具体如下:
分类信息如下:
******** 第1级(总分类)***** 第2级(服务项目) *****第3级(分类方式)***** 第4级 ******************************************
-----------汽车美容
-------------------------------------洗车
-------------------------------------------------------------------洗车方式
----------------------------------------------------------------------------------------------人工洗车
----------------------------------------------------------------------------------------------自动洗车
-------------------------------------------------------------------价格区间
----------------------------------------------------------------------------------------------0-30
----------------------------------------------------------------------------------------------31-50
----------------------------------------------------------------------------------------------51-70
----------------------------------------------------------------------------------------------71以上
-------------------------------------------------------------------(其他)
-------------------------------------打蜡
-------------------------------------------------------------------品牌
----------------------------------------------------------------------------------------------3M
----------------------------------------------------------------------------------------------龟牌
----------------------------------------------------------------------------------------------(其他)
-------------------------------------------------------------------价格区间
----------------------------------------------------------------------------------------------0-50
----------------------------------------------------------------------------------------------51-100
----------------------------------------------------------------------------------------------101-150
----------------------------------------------------------------------------------------------151-200
----------------------------------------------------------------------------------------------151以上
-------------------------------------------------------------------(其他)
-------------------------------------(其他)
-----------汽车装饰
---------------------------------玻璃贴膜
---------------------------------底盘装甲
-----------(其他)
**********************************************************************************************************
要求可以按“查询所有”,“服务项目=洗车”, “服务项目=洗车 & 洗车方式=人工洗车”, “服务项目=洗车 & 洗车方式=人工洗车 & 价格区间=0-50” 等查找对应产品服务
难点在于如何查询按方式 “服务项目=洗车 & 洗车方式=人工洗车”,“服务项目=洗车 & 洗车方式=人工洗车 & 价格区间=0-50” 等这样的复合条件检索,因为第二级分类之后,分类维度变高,不易于检索
我的解决方案是:
分类表GoodsClassify:
这样运用静态链表可以存取分类结构
商品表Goods:
其中classify1st可以按总分类属性查询对应商品
其中classify2nd可以按服务项目属性查询对应商品【为了加快查询速度,可以在(classify1st,classify2nd)上建立复合索引】
这样可以存放商品主要信息,但那些多维度分类信息就不好存了
思路:
为了解决前面所提出的“难点”
我为每个服务项目(第2级分类)建立独立的分类索引表,考虑到服务项目的不确定性,我用触发器建完成这份工作,
也就是
1. 当我在“汽车美容”(第1级分类)下添加“洗车”(第2级分类)时,用建立在表GoodsClassify上的促发器创建一个新表(表名为“洗车”),
2. 当我再向“洗车”(第2级分类)下添加“洗车方式”(分类方式)时,用建立在表GoodsClassify上的促发器在名为“洗车”的表中添加新列(列名为“洗车方式”),
类似,向“洗车”(第2级分类)下添加“价格区间”(分类方式)时,用建立在表GoodsClassify上的促发器在名为“洗车”的表中添加新列(列名为“价格区间”),
如此类推......
3.当我向“洗车方式”(第3级分类)下添加“人工洗车”
******我们的促发器是这样的
if (object_id('tgr_Classify_insert', 'tr') is not null) drop trigger tgr_Classify_insert go create trigger tgr_Classify_insert on GoodsClassify after insert as declare @lvl int select @lvl=lvl from inserted --获取分类级别 if(@lvl=2) --如果添加第二级分类 begin declare @classify2 nvarchar(10); select @classify2=(select classify from inserted) --创建第二级分类对应的商品表 IF not EXISTS (SELECT name FROM sysobjects WHERE name =@classify2 AND type = 'U') begin declare @createtable nvarchar(100) set @createtable='create table ' + @classify2 + '(id int PRIMARY KEY, goodsId int)' exec(@createtable) end --创建结束 end if(@lvl=3) --如果添加第三级分类 此级存放商品分类规则 begin declare @classify3 nvarchar(10), @parent nvarchar(10); select @classify3 = classify , @parent = parent from inserted If not exists (select * from syscolumns where id=object_id(@parent ) and name=@classify3) begin declare @addColumn nvarchar(100) set @addColumn='alter table ['+@parent +'] add '+@classify3+' nvarchar(10) null' print @addColumn exec(@addColumn) end end go
现在进行如下几部测试看下效果:
1. 执行:
insert into goodsclassify(classify, lvl, parent) values('洗车',2,'汽车美容')
结果:
2. 执行:
insert into goodsclassify(classify, lvl, parent) values('洗车方式',3,'洗车')
结果:
执行:
insert into goodsclassify(classify, lvl, parent) values('价格区间',3,'洗车')结果:
3.将第4级分类插入goodsclassify表中
insert into goodsclassify(classify, lvl, parent) values('人工洗车',4,'洗车方式')
insert into goodsclassify(classify, lvl, parent) values('自动洗车',4,'洗车方式').........
说明:
这样就解决了不同的服务项目具有不同的分类方式,并且这种分类方式的数目不确定这一问题
解决存:
添加一项产品时,将基本信息存放在Goods表中,
将第二级分类之后的分类信息存放在对应的服务项目分类表中,用goodsId建立了关系
解决取:
按照条件 :“查询所有” 可以直接在Goods表中检索
按照条件 :服务项目=“洗车” 可以直接在Goods表中检索
按照条件 : 服务项目=“洗车” & 洗车方式=“人工洗车” ” 可以在洗车表里检索
按照条件 : 服务项目=“洗车” & 洗车方式=“人工洗车” & 其他属性=“某某某” 可以在洗车表里检索
备注,为了加快检索速度,可以在某些列上建立索引
相关文章推荐
- 阿里云数据库产品HybridDB简介——OLAP数据库,支持行列混合存储,为用户提供基于开源 OLTP、OLAP、BigData 生态的一站式解决方案
- 基于Lucene/XML的站内全文检索解决方案
- 基于数据库的中小型应用软件维护 改进解决方案
- 基于Lucene/XML的站内全文检索解决方案:WebLucene 【转】
- 基于 Hibernate搜索的数据库全文检索系
- 基于Lucene/XML的站内全文检索解决方案 (来自:车东先生)
- 基于silverlight+wcf+bingmaps的水文信息检索系统之对实时雨水情数据库(讨论稿)的认识
- 基于Lucene/XML的站内全文检索解决方案:WebLucene
- 数据库备份还原时-Sql Server 检测到基于一致性的逻辑I/O错误解决方案
- 基于微软产品 Dynamics SL,面向工程建设和承包商的解决方案,及微软合作伙伴
- 基于微软解决方案的负载测试实现-知识库1____(转)理解.NET中的数据库连接池
- 基于Lucene/XML的站内全文检索解决方案
- 基于Lucene/XML的站内全文检索解决方案
- 基于Lucene/XML的站内全文检索解决方案_搜索引擎优化SEO165
- 基于Lucene/XML的站内全文检索解决方案(转载)
- 基于Lucene/XML的站内全文检索解决方案:WebLucene
- ASP页面将数据库中检索数据生成到本地报表的解决方案
- 基于javabean的B/S程序数据库连接解决方案