一种解决方案(性能垃圾,基本实现功能) 商品表 属性集表 属性表 属性值表 SKU表 SKU选项表 属性集和属性之间的中间表 商品表 CREATE TABLE Products [ID] [int] IDENTITY(1,1) NOT NULL,--主键 [Name] [nvarchar](50) NOT NULL,--名称 [Describe] [nvarchar](max) NULL,--描述 [PropertiesSetID] [int] NOT NULL--属性集id 属性集合表(属性的组合,便于选择属性并选择属性对应的值) CREATE TABLE PropertiesSet [ID] [int] IDENTITY(1,1) NOT NULL,--主键 [Describe] [nvarchar](max) NULL--描述 属性表 CREATE TABLE Property [ID] [int] IDENTITY(1,1) NOT NULL, [Name] [nvarchar](50) NOT NULL, [Describe] [nvarchar](max) NULL 属性值表 CREATE TABLE PropertyValue [ID] [int] IDENTITY(1,1) NOT NULL, [Value] [nvarchar](50) NOT NULL, [PropertyID] [int] NOT NULL, 属性集和属性中间表 CREATE TABLE SetBtProperty [SetBtPropertiesID] [int] IDENTITY(1,1) NOT NULL, [SetID] [int] NOT NULL, [PropertyID] [int] NOT NULL, SKU表 CREATE TABLE SKU [SKUID] [nvarchar](128) NOT NULL, [Price] [money] NOT NULL, [Number] [int] NOT NULL, [ProductID] [int] NOT NULL, SKU选项表 CREATE TABLE SKUOptions [SKUID] [nvarchar](128) NOT NULL, [ID] [int] IDENTITY(1,1) NOT NULL, [PropertyID] [int] NOT NULL, [PropertyValueID] [int] NOT NULL 商家添加商品 商家可以添加属性集合 create procedure [dbo].[sp_CreatePropertySet] ( @PropertyIDS nvarchar(512),--属性的参数集合 通过 ID;ID的方式进行拼接的字符串 @SetDescribe nvarchar(512)--描述要创建的 属性集合 ) as begin--这里这样可能没有直接 插入库简便,为了练习 表变量和遍历 insert into PropertiesSet (Describe) values (@SetDescribe) --添加属性集 PropertySet declare @setID int ; set @[email protected]@IDENTITY--表示刚插入的集合的id --sqlserver中没有集合List的概念,但是有些时候需要用到 类似于【集合,数组】的功能,比如这个@PropertyIDS,通过 ID;ID的方式进行拼接的字符串 需要进行 ;切割获取到 每个属性的ID,之后在需要的地方还需要取出来使用 在c#中能够使用List;sqlserver中可以通过【表变量】来实现集合和数组的功能 --截取属性集字符串放入【“数组”】 declare @StorePropertyIDS table --声明存储 PropertyID的表变量 ( id int,--模拟数组集合的索引 0 1 2。。。 PropertyID int--值 ) declare @conditionNum int set @conditionNum=-1 while(@conditionNum<>0)--charindex得不到就返回0,不同于c#返回-1 begin declare @location int set @location = charindex(‘;‘,@PropertyIDS)--存储;出现的位置 12;123;23568 if(@location<=1) begin declare @str nvarchar(512) = substring(@PropertyIDS,1,len(@PropertyIDS)) insert into @StorePropertyIDS (id,PropertyID) values (@conditionNum+1,cast(@str as int)) set @PropertyIDS= substring(@PropertyIDS,@location+1,len(@PropertyIDS)[email protected])--重新赋值 ids组合字符串 end else--》1 begin declare @str2 nvarchar(512)=SUBSTRING(@PropertyIDS,1,@location-1) insert into @StorePropertyIDS (id,PropertyID) values (@conditionNum+1,cast(@str2 as int)) set @PropertyIDS= substring(@PropertyIDS,@location+1,len(@PropertyIDS)[email protected])--重新赋值 ids组合字符串 end set @conditionNum = @location--while的条件使用,当charindex没有的时候不不需要再循环了 --遍历表变量插入 中间表 --sqlserver中遍历一个表的方法 declare @id int;declare @ProID int;declare @nec bit; while exists(select id from @StorePropertyIDS) begin set rowcount 1 select @id = id,@ProID=PropertyID from @StorePropertyIDS set rowcount 0 delete from @StorePropertyIDS where id = @id insert into SetBtProperty (SetID,PropertyID) values(@setID,@ProID) end end end 开始添加商品 create procedure [dbo].[sp_AddProduct] ( @num int,--数量 @price money,--价格 @productID int,--商品id @setID int,--属性集合id @options nvarchar(612),--属性;值得组合, 如 颜色id#对应的值id;想好id#对应的值id @name nvarchar(168),--商品名称 @describe nvarchar(614)--商品描述 ) as begin--{ declare @pidExists int; select @pidExists = count(1) from Products where [email protected] if(@pidExists=0)--不存在 begin insert into Products(Name,Describe,PropertiesSetID) values (@name,@describe,@setID) set @productID = @@IDENTITY end declare @pv table(id int identity(1,1),propID int,pvalue int)--声明表变量,把截取得到的属性编号和值编号存起来,类似于代码中的集合的作用List declare @pv2 table(id int identity(1,1),propID int,pvalue int)--由于遍历一次要删掉,要用2次就声明了两个 declare @tb table(id int identity(1,1),skuid nvarchar(128)) --获取属性值得组合,属性的个数等在代码中进行控制 [1#1;2#5;13#23] declare @whileNum int=-1 --截取@options插入到表变量@pv while (@whileNum<>0) begin--{ declare @kv nvarchar(128) --存储截取后的前部分的字符串 declare @location int = charindex(N‘;‘,@options)--表示;在options中的位置,sqlserver中的位置是从1开始计算的 if(@location=0)--没有了; begin--{ set @kv = substring(@options,1,len(@options)) insert into @pv(propID,pvalue) values (cast(SUBSTRING(@kv,1,charindex(N‘#‘,@kv)-1) as int),SUBSTRING(@kv,charindex(N‘#‘,@kv)+1,len(@kv)-charindex(N‘#‘,@kv)))--插入@pv表变量 insert into @pv2(propID,pvalue) values (cast(SUBSTRING(@kv,1,charindex(N‘#‘,@kv)-1) as int),SUBSTRING(@kv,charindex(N‘#‘,@kv)+1,len(@kv)-charindex(N‘#‘,@kv)))--插入@pv2表变量 end--} else--能够截取到; begin--{ set @kv = substring(@options,1,@location-1) insert into @pv(propID,pvalue) values (cast(SUBSTRING(@kv,1,charindex(N‘#‘,@kv)-1) as int),SUBSTRING(@kv,charindex(N‘#‘,@kv)+1,len(@kv)-charindex(N‘#‘,@kv)))--插入@pv表变量 insert into @pv2(propID,pvalue) values (cast(SUBSTRING(@kv,1,charindex(N‘#‘,@kv)-1) as int),SUBSTRING(@kv,charindex(N‘#‘,@kv)+1,len(@kv)-charindex(N‘#‘,@kv)))--插入@pv2表变量 set @options = SUBSTRING(@options,@location+1,len(@options)[email protected]);--重新个options赋值 end--} set @whileNum = @location --当没有;时候charindex()返回0 end--} declare @sqlStr nvarchar(1000)=‘‘--用来根据id+属性+值获取sku信息的语句 --根据商品id+属性+属性值 来获取skuid,是否存在,存在则修改;不存则添加新的skuid declare @id int;declare @propID int;declare @pvalue int while exists(select id from @pv)--遍历白表变量 begin--{ set rowcount 1 select @id=id,@propID=propid,@pvalue=pvalue from @pv set rowcount 0 delete from @pv where id = @id set @sqlStr [email protected]+ N‘select skuid from SKUOptions where PropertyID =‘+cast(@propID as nvarchar(32))+N‘ and PropertyValueID =‘+cast(@pvalue as nvarchar(32))+‘ intersect ‘ end--} set @sqlStr = substring(@sqlStr,1,len(@sqlStr)-10)--把最后的intersect去掉 insert into @tb exec sp_executesql @sqlStr--把sp_executesql得到的结果集插入表变量@tb中 declare @HaveSKUID nvarchar(128); select @HaveSKUID = skuid from SKU where [email protected] and skuid in (select skuid from @tb) if(@HaveSKUID is null)--不存在 begin--{ declare @newid nvarchar(128)=NEWID() insert into SKU (SKUID,Price,Number,ProductID) values (@newid,@price,@num,@productID)--插入sku表 --遍历pv2插入skuoption表 while exists(select id from @pv2) begin--{ set rowcount 1 select @id=id,@propID=propid,@pvalue=pvalue from @pv2 set rowcount 0 delete from @pv2 where id = @id insert into SKUOptions(SKUID,PropertyID,PropertyValueID) values(@newid,@propID,@pvalue)--插入skuoption表 end--} end--} else--存在 begin--{ update SKU set [email protected] where [email protected]只需要修改数量即可 end--} end--} 加入购物车,此时 能够得到的参数是 商品id 买家选该商品的属性和值 create proc [dbo].[sp_GetSKUFromPropIdAndProperty]--根据商品id和属性获取sku信息,根据skuid的情况一般的sql就能够满足 ( @productID int,--商品id @options nvarchar(612)--属性;值得组合, 如 颜色id#对应的值id;想好id#对应的值id ) as begin--{ declare @pv table(id int identity(1,1),propID int,pvalue int)--声明表变量,把截取得到的属性编号和值编号存起来,类似于代码中的集合的作用List declare @tb table(id int identity(1,1),skuid nvarchar(128))--声明表变量,存储sku信息 declare @whileNum int=-1 --截取@options插入到表变量@pv while (@whileNum<>0) begin--{ declare @kv nvarchar(128) --存储截取后的前部分的字符串 declare @location int = charindex(N‘;‘,@options)--表示;在options中的位置,sqlserver中的位置是从1开始计算的 if(@location=0)--没有了; begin--{ set @kv = substring(@options,1,len(@options)) insert into @pv(propID,pvalue) values (cast(SUBSTRING(@kv,1,charindex(N‘#‘,@kv)-1) as int),SUBSTRING(@kv,charindex(N‘#‘,@kv)+1,len(@kv)-charindex(N‘#‘,@kv)))--插入@pv表变量 end--} else--能够截取到; begin--{ set @kv = substring(@options,1,@location-1) insert into @pv(propID,pvalue) values (cast(SUBSTRING(@kv,1,charindex(N‘#‘,@kv)-1) as int),SUBSTRING(@kv,charindex(N‘#‘,@kv)+1,len(@kv)-charindex(N‘#‘,@kv)))--插入@pv表变量 set @options = SUBSTRING(@options,@location+1,len(@options)[email protected]);--重新个options赋值 end--} set @whileNum = @location --当没有;时候charindex()返回0 end--} declare @sqlStr nvarchar(1000)=‘‘--用来根据id+属性+值获取sku信息的语句 --根据商品id+属性+属性值 来获取skuid,是否存在,存在则修改;不存则添加新的skuid declare @id int;declare @propID int;declare @pvalue int while exists(select id from @pv)--遍历白表变量 begin--{ set rowcount 1 select @id=id,@propID=propid,@pvalue=pvalue from @pv set rowcount 0 delete from @pv where id = @id set @sqlStr [email protected]+ N‘select skuid from SKUOptions where PropertyID =‘+cast(@propID as nvarchar(32))+N‘ and PropertyValueID =‘+cast(@pvalue as nvarchar(32))+‘ intersect ‘ end--} set @sqlStr = substring(@sqlStr,1,len(@sqlStr)-10)--把最后的intersect去掉 insert into @tb exec sp_executesql @sqlStr--把sp_executesql得到的结果集插入表变量@tb中 select * from SKU where [email protected] and skuid in (select skuid from @tb) end--} 当然购物车中或者其他地方能够得到skuid,直接通过他查询即可,直接where查询完事.. |
商品库存SKU
时间: 2024-12-01 03:23:19
商品库存SKU的相关文章
PHP中Notice: Undefined index: sku in 问题解决方案
这个不是bug,而且warning,当用$_GET[]或$_POST[]时不加isset之类判断的话,就会提示这个错误,Jones建议的解决方案完美解决这个问题: /* * 取代$_GET[]获取值 */ function _get($str) { $val = !empty($_GET[$str]) ? $_GET[$str] : null; return $val; } /* * 取代$_POST[]获取值 */ function _post($str) { $val = !empty($_
B2C电子商务系统研发——商品SKU分析和设计(二)
转:http://www.cnblogs.com/winstonyan/archive/2012/01/07/2315886.html 上文谈到5种商品SKU设计模式,本文将做些细化说明. 笔者研究过不少电子商务平台软件,关于SKU的设计各有不同,之所以有这样的区别,是因为面向不同规模的电子商务网站, 存在产品分类复杂度,产品数量级的差异.一种设计方式对于百货式的网站,如京东.淘宝等,也许比较方便,但也许对于一个 专卖服装的小型时尚类网站就不够方便了. 我们先看一下麦包包的 女包:http://
Django model :add a non-nullable field &#39;SKU&#39; to product without a default; we can&#39;t do that
You are trying to add a non-nullable field 'SKU' to product without a default; we can't do that (the database needs something to populate existing rows). Please select a fix: 1) Provide a one-off default now (will be set on all existing rows) 2) Quit
谈谈我对sku的理解(1)
sku的全称是 Stock Keeping Unit ,顾名思义就是库存保存的一个单元,最早用于沃尔玛这种大超市.现在电商行业这么发达,所有的商品都需要发布和配置库存和价格.这样,在互联网世界,sku也就应运而生.今天说说我在工作中遇到的sku和解决方案. 上面介绍了sku的概念,但还是比较抽象.举个简单的例子,现在我需要卖康师傅方便面, 那么康师傅方便面有很多种味道(列举三个,红烧排骨,香菇炖鸡,海鲜味).除了味道,方便面好像还有一些别的属性,比如分为碗装,袋装,超大碗装. 也许还有一些
求大神  ; 谁做过类似淘宝的sku商品信息组合
求大神 谁做过类似淘宝的sku商品信息组合
SKU与SPU的区别
1. SKU(Stock Keeping Unit)库存量单元 --- SKU是商品下的一个分类属性(商品下一个颜色或者尺码) 2. SPU(Standard Product Unit)标准化产品单元 --- SPU是一个商品编码 一个SKU可以对应多个SPU,简单的说: SPU就是一个iPhone6s, SKU就是银色iPhone6s.粉色iPhone6s
商品sku处理
简单来说,一个电商类网站,根据平台的不同,商品的属性自然也就不同. 一般情况来说,一个商品 goods_id 对应多个 sku_id ; 设计表时我们会采取这样的方式: 产品表 --- 产品sku表 --- 产品基本属性表(产品属性名称表---产品属性值表) 就目前我所接触到得项目而言:一个商品id既是一个商品的id,也是一组商品(相同属性名称,不同属性值)的主id. 在这个项目中,我所了解到的数据库表结构基本如下: 商品表 goods_id -- 商品id goods_commondid
在电子商务里,一般会提到这样几个词:商品、单品、SPU、SKU
简单理解一下,SPU是标准化产品单元,区分品种:SKU是库存量单位,区分单品:商品特指与商家有关的商品,可对应多个SKU. 首先,搞清楚商品与单品的区别.例如,iphone是一个单品,但是在淘宝上当很多商家同时出售这个产品的时候,iphone就是一个商品了. 商品:淘宝叫item,京东叫product,商品特指与商家有关的商品,每个商品有一个商家编码,每个商品下面有多个颜色,款式,可以有多个SKU. SPU = Standard Product Unit (标准化产品单元),SPU是商品信息聚合
SKU=Stock Keeping Unit(库存量单位)。即库存进出计量的单位,可以是以件,盒,托盘等为单位
SKU=Stock Keeping Unit(库存量单位).即库存进出计量的单位,可以是以件,盒,托盘等为单位.SKU这是对于大型连锁超市DC(配送中心)物流管理的一个必要的方法.现在已经被引申为产品统一编号的简称,每种产品均对应有唯一的SKU号.单品:对一种商品而言,当其品牌.型号.配置.等级.花色.包装容量.单位.生产日期.保质期.用途.价格.产地等属性与其他商品存在不同时,可称为一个单品.