商品相关表结构设计
近年来,中国的电子商务快速发展,交易额连创新高,电子商务在各领域的应用不断拓展和深化、相关服务业蓬勃发展、支撑体系不断健全完善、创新的动力和能力不断增强。电子商务正在与实体经济深度融合,进入规模性发展阶段,对经济社会生活的影响不断增大,正成为我国经济发展的新引擎,加上几年手疫情的影响,电商、直播等线上销售愈加火热,本人亲自参与一个从0-1的电商项目,带大家一起来聊聊一个电商项目在数据结构这块该怎么去设计。
商品表相关的数据表结构
以下两个问题大家不妨先想想:
- SPU与SKU含义是什么,他们之间有什么关系,为什么要有SPU和SKU?
- 库存应该怎么设置?
首先我们来看看京东、苏宁易购web端吧!
- 京东:
- 苏宁易购:
大家想想看,从菜单上面来看,我们的商品表该怎么设计,商品种类成千上万,每一类商品又有不同的规格,所以我们就引入了两个概念,SPU和SKU,那么什么又叫做SPU和SKU?
- SPU:
SPU= Standard Product Unit(标准化产品单元)
是商品信息聚合的最小单位
属性值、特性相同的商品就可以成为一个SPU
- SKU:
SKU=Stock Keeping Unit(库存量单位)
SKU是用来定价和管理库存的
如:iPhone11 有很多颜色,很多配置,每个颜色和配置的组合都会形成新的产品,这时就产生很多SKU
SKU在传统线下行业也是一个非常常用的概念,尤其是服装行业,同款不同尺码不同色都是独立的SKU,需要有独立的条形码,独立的库存管理等
明白了SPU和SKU的含义,相信大家对他们之间的关系和存在的意义都有一个大致的了解了吧,接下来,我们就开始动手吧。
表设计
向这种大型电商平台,售卖的商品多种多样,产品之间的规格也都不一样,我们在设计商品表的时候也不能把每一种商品都设计到一起,我们必须进行分类管理是不是更加明确,然后每一类里面又有其他的子类,以此类推。
其实吧,我们平时学习的时候,带着一个疑问去学习,到最后做一个总结,往往会有意想不到的效果
在开始设计以前,我们上面提到过,商品种类成千上万,每个商品又有不同的规格,但是在设置商品规格的时候,不同的商品又有不同的参数,在一个大型的电商平台下我们又改如何去细分达到更好的效果。
参数如何与SKU关联起来?
话不多说,开始设计吧!
先设计这四张表:
品类表------参数表
| |
产品表------商品表
品类表与参数表的设计:
- 品类表:
将所有的商品按品类划分,与之参数表形成一对多的的关系,主键维护在参数表 - 参数表:
关联品类表主键,spg_id - 关系:一对多 一个品类下有多个参数,参数用name字段表示
品牌表与分类表的设计:
- 品牌表:
从上图可以看出,从菜单选完后,到三级菜单,比如我们选择买一个手机,最终要到三级菜单去选择我们要购买具体哪一个品牌。 - 分类表:
分类表主要是使用一个parent_id上级分类id,相当于一种链表结构,方便扩展,比如我们以后还需要添加一个四级、五级分类甚至更多,是不需要改变表结构的
就好比方说,二级分类记录关联他隶属的一级分类的id,三级分类记录关联他隶属的二级分类的id,一次类推,一级分类就没有父id. - 分类、品牌关联表:
因为分类表和品牌是多对多的关系,所以我们用一个中间表来维护这两个表
上面我们就对分类表及品牌表做好了关联!实现多对多的关系,创建中间表实现关联。
SPU表:
当我们通过菜单到了从属品牌后,我们随便选一个品牌,比如我们选择Apple,出现这个品牌中有Air,Apple 11等等,这就是SPU,一个个的产品
- 字段有:
SPU表关联了品类id、分类id、品牌id,品牌id是可以为空的,因为有的散装的产品是没有品牌的
关联品类id,与品类实现一对一的关系,一个产品对应一个品类,同时一个品类也对应一个产品
SKU表:
因为SPU表与SKU表是一对的关系的,所以我们就需要在SKU表中去维护SPU表的主键来实现两个表之间的关联
param:参数这个字段类型是用的json格式,在MySQL5.7+版本引入的
price:价格这个字段是否设置多个价格,比如原价、折扣价、最终价等等一系列字段看业务需求设置,我这里只用一个字段进行统一描述价格
关于saleable:是否上架和valid是否有效这两个字段为什么要有,我做下说明:
假如我们现在有一款产品,销量很不多,但是呢,由于其他的原因这款商品现在不卖了,如果我们没有这两个字段,我们是否是要删除这个商品的信息呢?热销商品是牵扯到很多订单,删除了我们就需要删除所有的订单信息,所以我们在这里设置这两个字段用来描述商品的一个状态就可以了。
总结:
- 设计哪几张表
表名 | 含义 |
品类表 | 对商品进行归档 |
参数表 | 维护复杂的参数 |
分类表 | 商品展示菜单 |
品牌表 | 对商品进行归档 |
SPU表 | 为了实现高效搜索 |
SKU表 | 即商品表 |
- 实现关系
品类表与参数表:一对多,多的一方维护主键
分类表与品牌表:多对多,创建中间表
SPU表和SKU表:多对多,创建中间表
SPU表和品类表: 一对多,在SPU表中维护主键
SPU表和分类表:一对多,在SPU表中维护主键
SPU表和品牌表:一对多,在SPU表中维护主键
- 实现关系图
SQL语句未上图,如果需要SQL语句的欢迎大家在下发留言,同时,文中如果有理解不对的,也希望大家能够指出。