产品分类检索解决方案(基于数据库)
来源:互联网 发布:java statement 编辑:程序博客网 时间:2024/06/01 09:56
问题背景:
按照分类存取产品,并且产品分类可变更,要求可以根据分类检索到相应产品,当遇到多维度分类时不易于实现,具体如下:
分类信息如下:
******** 第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_insertgocreate trigger tgr_Classify_inserton GoodsClassify after insertas declare @lvl intselect @lvl=lvl from inserted--获取分类级别if(@lvl=2)--如果添加第二级分类begindeclare @classify2 nvarchar(10);select @classify2=(select classify from inserted)--创建第二级分类对应的商品表IF not EXISTS (SELECT name FROM sysobjects WHERE name =@classify2 AND type = 'U')begindeclare @createtable nvarchar(100)set @createtable='create table ' + @classify2 + '(id int PRIMARY KEY, goodsId int)'exec(@createtable)end--创建结束endif(@lvl=3) --如果添加第三级分类 此级存放商品分类规则begindeclare @classify3 nvarchar(10), @parent nvarchar(10);select @classify3 = classify , @parent = parent from insertedIf not exists (select * from syscolumns where id=object_id(@parent ) and name=@classify3)begindeclare @addColumn nvarchar(100)set @addColumn='alter table ['+@parent +'] add '+@classify3+' nvarchar(10) null'print @addColumnexec(@addColumn)endendgo
现在进行如下几部测试看下效果:
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表中检索
按照条件 : 服务项目=“洗车” & 洗车方式=“人工洗车” ” 可以在洗车表里检索
按照条件 : 服务项目=“洗车” & 洗车方式=“人工洗车” & 其他属性=“某某某” 可以在洗车表里检索
备注,为了加快检索速度,可以在某些列上建立索引
- 产品分类检索解决方案(基于数据库)
- solr:基于lucene的全文检索解决方案
- MySQL数据库中文全文检索解决方案
- 基于本体的关系数据库语义检索
- 图像检索:几类基于内容的图像分类技术
- 图像检索:几类基于内容的图像分类技术
- 图像检索:几类基于内容的图像分类技术
- 基于深度学习的服装图像分类与检索
- 关于B2C官网产品分类属性解决方案思路
- 基于Lucene/XML的站内全文检索解决方案
- 基于Lucene/XML的站内全文检索解决方案
- 基于Lucene/XML的站内全文检索解决方案(转载)
- 基于Lucene/XML的站内全文检索解决方案
- 基于Lucene/XML的站内全文检索解决方案[摘]
- 基于Lucene/XML的站内全文检索解决方案:WebLucene
- 基于Lucene/XML的站内全文检索解决方案
- 基于Lucene/XML的站内全文检索解决方案:WebLucene
- 基于Lucene/XML的站内全文检索解决方案:WebLucene
- LeetCode-Jump Game II
- hdu 4946 Area of Mushroom
- c++编译时如何把private属性变成public?
- ACM题集以及各种总结大全!
- 没落的中医,是谁的过错(2)
- 产品分类检索解决方案(基于数据库)
- 不重新启动Linux,手工识别在线新增磁盘方法
- iDrap和iDialog学习笔记
- 徐小平:不要用兄弟情谊来追求共同利益,要用共同利益追求兄弟情谊
- Xcode环境变量 build Settings 设置
- poj 1177 Picture(扫描线+矩形周长并)
- poj-2886 Who Gets the Most Candies?
- [hdu 4945]14多校第八场A 2048 状压DP+数论
- Extjs中EditorGridPanel修改并获取数据的两种方式