产品分类检索解决方案(基于数据库)

问题背景:

按照分类存取产品,并且产品分类可变更,要求可以根据分类检索到相应产品,当遇到多维度分类时不易于实现,具体如下:

分类信息如下:

********  第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表中检索

按照条件 : 服务项目=“洗车” & 洗车方式=“人工洗车” ”  可以在洗车表里检索

按照条件 : 服务项目=“洗车” & 洗车方式=“人工洗车” & 其他属性=“某某某”  可以在洗车表里检索


备注,为了加快检索速度,可以在某些列上建立索引





  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我会尽力回答您关于HBase数据库课程设计的问题。请问您需要了解哪些方面的内容呢?我可以提供一些基本的信息,供您参考。 HBase是一种开源的、分布式的、非关系型(NoSQL)数据库系统,它是基于Google的Bigtable论文所设计的。它能够在海量数据的存储和处理方面提供高效、可靠的解决方案。 在进行HBase数据库课程设计时,您需要明确以下几个方面的内容: 1. 数据库设计:HBase是一个基于列族的数据库系统,您需要确定每个列族中包含哪些列,以及这些列的数据类型等信息。您需要考虑如何最大化地利用HBase的存储和检索能力。 2. 数据导入和导出:HBase支持多种数据导入和导出方式,例如Hadoop MapReduce、Apache Pig等。您需要选择适合您的数据导入和导出方式,并进行相应的数据处理和转换。 3. 数据检索和查询:HBase支持多种查询方式,例如全表扫描、行键范围扫描等。您需要根据实际需求选择适合的查询方式,并进行查询优化和索引设计。 4. 数据备份和恢复:HBase提供了多种数据备份和恢复方式,例如基于Hadoop的分布式备份和恢复、基于HBase的增量备份和恢复等。您需要根据实际需求选择适合的备份和恢复方式,并进行备份和恢复测试。 在进行HBase数据库课程设计时,您还需要掌握一些基本的技能和工具,例如HBase Shell、HBase REST API、HBase Thrift API等。同时,您还需要了解HBase的架构、数据模型、配置和优化等方面的内容。 希望以上信息能对您有所帮助,如果您还有其他问题,欢迎随时提出。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值