ECSHOP中如何存储各属性值下库存数量

ECSHOP中商品库存管理并非直接在goods表中存储,而是通过复杂的数据结构来处理不同属性下的库存数量。商品与属性关联表(ecs_goods_attr)和ecs_product表共同作用,其中ecs_product表存储库存,good_attr字段组合表示各属性数量。这种设计允许为每个属性组合设置不同的库存,避免了属性字段数量不确定的问题。

先来看一下ECSHOP添加商品的主页,其实这部分很奇怪,因为在ECSHOP中,在商品添加页中并没有设置库存数量的这一选项:

这里写图片描述

图1 ECSHOP后台商品添加页面

而且看保存大部分商品信息的goods表(ecs_goods),在其中也没有直接保存商品库存数量的字段:

这里写图片描述

这里写图片描述

图2 ECSHOP商品表(ecs_goods)

因为商品库存数量如果直接保存在goods表中的一个字段的话是不完整的,因为商品有不同的属性,各个属性下商品的数量是不同的,而且这些属性还不是相互独立的,看下面这张表:

表1 所需存储数据表

颜色/款式运动鞋篮球鞋登山鞋轻跑鞋休闲鞋
玫瑰红12345
运动紫678910
商务黑1112131415
复古褐1617181920

- 属性1:颜色,具体的值有:玫瑰红,运动紫,商务黑,复古褐
- 属性2:款式,具体的值有:运动鞋,篮球鞋,登山鞋,轻跑鞋,休闲鞋

这样的形式才是我们一般看见的报表形式,这样的形式怎么存储在mysql中?

可能性1:

表2 错误示范

商品id颜色款式数量
1玫瑰红运动鞋1
2玫瑰红篮球鞋2

。。。。。。

我就不接着往下写了,这样会存在一个问题,那就是属性字段数量不确定,这里我们提前知道有两个属性,所以设置了字段颜色,款式,可是当我们的属性更多时,这种表结构就无能为力了。

可能性2:

属性与商品的关联表:

关联表id属性id商品id属性值
1款式1运动鞋
2颜色1玫瑰红
3款式2篮球鞋
4颜色2玫瑰红

商品表

商品id库存数量
11
22

然后采用子查询的方法,当输入一个属性的值时,比如玫瑰红,则可以通过商品与属性关联表来查到拥有该属性的商品有1和2,再接着输入下一个属性,比如运动鞋,在上次的查询结果中(1和2),中再进行查询,则可以查出拥有该属性的是1,再来我们再去查商品表就可以查出该商品的具体库存数量了,借用一句教我这种方法的大哥的话:

查询是一个条件叠加一个条件进行的。

这样的确可以满足查村条件,而且也可以针对不同属性下商品设置不同的参数,如价格和库存。

接下来讲讲ECSHOP是如何存储上述情况的。

这里我拿Mysql-WorkBench画了ER图:

图3 ECSHOP存储属性值

这里写图片描述

其中对应与ECSHOP后台管理界面的内容如下:

  • ecs_goods:存储商品大部分信息,也就是图1中的大部分信息
  • ecs_attribute:存储商品大部分属性,及其可选值,如上面的例子中,对应到ecs_attribute中就是:
attr_idattr_nameattr_values
1颜色玫瑰用,运动紫,商务黑,复古褐
2款式运动鞋,篮球鞋,登山鞋,休闲鞋

感觉上这里的attr_values字段有点违反范式。

  • ecs_goods_attr:则是ecs_goods和ecs_attribute的关联表,并且负责将ecs_attribute中的attr_values字段拆开,分别存储价格
goods_attr_idattr_idgoods_idattr_valueattr_price
111玫瑰红100
211运动紫90
311商务黑80
411复古褐70
521运动鞋60
621篮球鞋50
  • ecs_product:存储库存数量
product_idgoods_idgoods_attrproduct_snproduct_number
111|5商品货号,由系统生成1
211|5……2

这里的good_attr字段其实就是ecs_goods_attr中goods_attr_id字段的组合,表示各自属性的数量,可以对照表1来理解。

ecs_product表对应的其实就是后台管理页面中的这部分:

这里写图片描述

这部分在图1 中点击确定之后就会跳转到该页面,并在该页面中设置各属性下具体的数量。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值