SpringBoot电商项目实战 — 商品的SPU/SKU实现
最近事情有点多,所以系列文章已停止好多天了。今天我们继续Springboot电商项目实战系列文章。到目前为止,整个项目的架构和基础服务已经全部实现,分布式锁也已经讲过了。那么,现在应该到数据库设计及代码实现阶段,我们要注意或准备什么呢?今天先说说商品的数据库表设计问题吧。
来看看上面的图片,这个商品的数据库表怎么设计呢?是不是有人会说,4张表搞定:商品分类表、商品信息表、价格表、属性表。
没错,这样是可以实现,但存在很多弊端,比如就针对上面的商品(手机),不同的颜色,不同的版本都有不同的价格。按传统的设计思路,我们把版本作为属性,不同的属性对应不同的价格,看似不错。那颜色又怎么处理呢?是不是不同的版本不同的价格,颜色你就可以随便选呢?但现实中并不是这样,同一个版本配置,不同颜色往往都是不同的价格。这又怎么办呢?你可能又会说我把颜色再设置成一个属性,颜色和版本两个属性组合设置一条价格信息。那如果还有套餐呢?我们继续这样搞,是的,完全没问题。那库存呢?是否还要放在商品信息表呢?明显这样是有问题的。比如荣耀20 版本6G 128G 蓝水翡翠 已经卖完了,但这个版本的其他颜色还有货呀。那数据库到底怎么设计呢?这就是今天要讲的话题。目前的主流解决方案SPU、SKU。
商品的SPU, SKU实现
首先,什么是SPU,SKU呢?
SPU(Standard Product Unit)即标准化产品单元 SPU是商品信息聚合的最小单位,是一组可复用标准化信息的集合。
SKU(Stock Keeping Unit)即库存量单位 SKU即库存进出计量的单位,可以是以件、盒、托盘等为单位。
对于电商而言,SPU有一个唯一编码,一个SPU代表一个产品;SKU为一个产品不同属性、规格之间的编码。也就是说,SPU代表产品,SKU代表属性与规格;一个产品,可以是单属性产品,也可以是多属性产品,也就是说一个产品可以有一个SKU,也可以有多个SKU。
那么,针对上面的商品,数据库表究竟怎么设计呢?
这里是简单的商品SPU、SKU表设计实现,一共包含六个表。
1,商品分类表
此表添加了parent_id字段,可实现无限层级的树状数据结构,parent_id=0表明当前为根节点,否则可使用递归算法来遍历分类下的所有子分类。这里我根据上面图片中的商品添加了他的基础分类数据如下:
2,商品品牌表
此表的结构比较简单,就是品牌的基础信息。如图片中的荣耀手机,那么荣耀作为一个手机品牌,添加基础数据如下:
3,商品表(SPU)
这个表里的每一条数据就是一个标准的产品单元,也就是所谓的SPU。比如荣耀20手机,这就是一个标准的商品,所以我们把它作为一条商品数据存储。此表必须要包含的字段:商品分类ID,商品品牌ID。注:此表里的商品详情信息字段,不要直接保存商品的图文化信息,可以把图文化信息转成html静态文件存储在文件服务器,然后将存储的路径url保存在数据库此字段里。这样会在很大程度上节约数据库开销。
4,规格表(SKU)
规则表就是这里所谓的商品SKU实现,也就是说这里实现的是商品的存储单元。针对每一个多属性的商品,几个不同属性的组合将有自己独立的库存和价格信息。如上面的荣耀20手机,通过颜色和版本这两个属性,组成了以下6条SKU信息。
5,商品属性key和属性value
这两个表作为商品分类的不同属性存储,在系统开始运营就需要做数据的初始化。日后运营人员如果要新增某一商品的SKU信息,就可直接根据数据库的这些基础数据选取,然后将属性再以json的形式存储到对应的规格表。
属性key:
属性value:
好了,到此为止商品的SPU、SKU已经说完了。今天我讲的这个设计方案,可完全适用于商品类别差异化不大的项目或系统中。但针对差异化较大的情况,那就需要根据自己的业务情况去优化处理。
注:此SpringBoot电商实战项目的源码已上传到github上并已开源,有需要的可以扫码关注公众号,然后发送“Springboot”获取github地址。
扫码关注公众号,发送关键词获取相关资料:
- 发送“Springboot”领取电商项目实战源码;
- 发送“SpringCloud”领取cloud学习实战资料;
SpringBoot电商项目实战 — 商品的SPU/SKU实现的更多相关文章
- SpringBoot电商项目实战 — Redis实现分布式锁
最近有小伙伴发消息说,在Springboot系列文第二篇,zookeeper是不是漏掉了?关于这个问题,其实我在写第二篇的时候已经考虑过,但基于本次系列文章是实战练习,在项目里你能看到Zookeepe ...
- SpringBoot电商项目实战 — ElasticSearch接入实现
如今在一些中大型网站中,搜索引擎已是必不可少的内容了.首先我们看看搜索引擎到底是什么呢?搜索引擎,就是根据用户需求与一定算法,运用特定策略从互联网检索出制定信息反馈给用户的一门检索技术.搜索引擎依托于 ...
- SpringBoot电商项目实战 — 前后端分离后的优雅部署及Nginx部署实现
在如今的SpringBoot微服务项目中,前后端分离已成为业界标准使用方式,通过使用nginx等代理方式有效的进行解耦,并且前后端分离会为以后的大型分布式架构.弹性计算架构.微服务架构.多端化服务(多 ...
- SpringBoot电商项目实战 — Zookeeper的分布式锁实现
上一篇演示了基于Redis的Redisson分布式锁实现,那今天我要再来说说基于Zookeeper的分布式现实. Zookeeper分布式锁实现 要用Zookeeper实现分布式锁,我就不得不说说zo ...
- web前端Vue+Django rest framework 框架 生鲜电商项目实战视频教程 ☝☝☝
web前端Vue+Django rest framework 框架 生鲜电商项目实战视频教程 web前端Vue+Django rest framework 框架 生鲜电商项目实战视频教程 学习 ...
- Java 18套JAVA企业级大型项目实战分布式架构高并发高可用微服务电商项目实战架构
Java 开发环境:idea https://www.jianshu.com/p/7a824fea1ce7 从无到有构建大型电商微服务架构三个阶段SpringBoot+SpringCloud+Solr ...
- Spark大型电商项目实战-及其改良之番外(1)-将spark前端页面效果高效拷贝至博客
Spark大型电商项目实战-及其改良这个系列的时间轴展示图一直在变....1-3篇是用图直接表示时间轴,用一段简陋的html代码表示时间表.第4篇开始才是用比较完整的前端效果,能移动.缩放时间轴,鼠标 ...
- 16套java架构师,高并发,高可用,高性能,集群,大型分布式电商项目实战视频教程
16套Java架构师,集群,高可用,高可扩展,高性能,高并发,性能优化,设计模式,数据结构,虚拟机,微服务架构,日志分析,工作流,Jvm,Dubbo ,Spring boot,Spring cloud ...
- web前端Vue+Django rest framework 框架 生鲜电商项目实战✍✍✍
web前端Vue+Django rest framework 框架 生鲜电商项目实战 整个课程都看完了,这个课程的分享可以往下看,下面有链接,之前做java开发也做了一些年头,也分享下自己看这个视频 ...
随机推荐
- cglib测试例子和源码详解
目录 简介 为什么会有动态代理? 常见的动态代理有哪些? 什么是cglib 使用例子 需求 工程环境 主要步骤 创建项目 引入依赖 编写被代理类 编写MethodInterceptor接口实现类 编写 ...
- Openlayers 地图定位到相应位置并缩放
说明: 在地图操作中,有个功能,需要点击一个点,将视图定位到点击点的位置,并放大. 解决方案: 1.可以有openlayers中可以有ol.View来控制,但是在更改时,会将地图初始化时设置的maxZ ...
- 2019-9-28:渗透测试,phpstudy后门,利用复现
9月20号爆出Phpstudy存在隐藏后门,简单复现下后门效果 该文章仅供学习,利用方法来自网络文章,仅供参考 目标机:win7系统,安装phpstudy 2018版,php版本5.2或php 5.4 ...
- win10在python3.6里安装pycrypto-2.6.1
简单的一步搞定 下载pycrypto-2.6.1-cp36-cp36m-win_amd64.whl文件,然后pip install即可 链接: https://pan.baidu.com/s/1Awl ...
- 【决战西二旗】|理解Sort算法
前言 前面两篇文章介绍了快速排序的基础知识和优化方向,今天来看一下STL中的sort算法的底层实现和代码技巧. 众所周知STL是借助于模板化来支撑数据结构和算法的通用化,通用化对于C++使用者来说已经 ...
- NIO-概览
目录 NIO-概览 目录 前言 什么是NIO 通道 缓冲区 选择器 其他 管道 FileLock 参考文档 NIO-概览 目录 NIO-概览 前言 本来是想学习Netty的,但是Netty是一个NIO ...
- java this,super简单理解
*****this****** 表示对当前对象的引用. 作用:1.区分实例变量和局部变量(this.name----->实例变量name) 2.将当前对象当做参数传递给其它对象和方法.利用thi ...
- JS使用readAsDataURL读取图像文件
JS使用readAsDataURL读取图像文件 FileReader对象的readAsDataURL方法可以将读取到的文件编码成Data URL.Data URL是一项特殊的技术,可以将资料(例如图片 ...
- 高并发编程-AQS深入解析
要点解说 AbstractQueuedSynchronizer简称AQS,它是java.util.concurrent包下CountDownLatch/FutureTask/ReentrantLock ...
- 有趣的动态规划(golang版本)
多年前就听过这个动态规划,最近在复习常用算法的时候才认真学习了一下,发现蛮有意思,和大家安利一波. 定义: 准确来说,动态规划师吧一个复杂问题分解成若干个子问题,并且寻找最优子问题的一种思想,而不是一 ...