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开发也做了一些年头,也分享下自己看这个视频 ...
随机推荐
- [ch02-03] 梯度下降
系列博客,原文在笔者所维护的github上:https://aka.ms/beginnerAI, 点击star加星不要吝啬,星越多笔者越努力. 2.3 梯度下降 2.3.1 从自然现象中理解梯度下降 ...
- 【Luogu P1168】【Luogu P1801&UVA 501】中位数&黑匣子(Black Box)——对顶堆相关
Luogu P1168 Luogu P1801 UVA 501(洛谷Remote Judge) 前置知识:堆.优先队列STL的使用 对顶堆 是一种在线维护第\(k\)小的算法. 其实就是开两个堆,一个 ...
- Xamarin.Forms学习系列之Android集成极光推送
一般App都会有消息推送的功能,如果是原生安卓或者IOS集成消息推送很容易,各大推送平台都有相关的Sample,但是关于Xamarin.Forms的消息推送集成的资料非常少,下面就说下Xamarin. ...
- Linux 基本命令操作 (文件共享) 一
前言:在学习Linux过程中,遇到一些经典而又基本的命令操作,想记录下来去帮助刚学Linux的同学.下面是有关相关的操作,我会进行详细的分解步骤:希望能够帮助到你们.由于时间仓促,再加上笔者的能力有限 ...
- Docker harbor 安装和基础操作
目录 简介 离线安装 配置文件 安装 查看 访问测试 及 简单操作 创建一个用户 创建一个测试仓库 创建测试仓库 测试上传和下载镜像 上传 下载镜像测试 简介 Docker容器应用的开发和运行离不开可 ...
- css5-盒子模型
HTML<!DOCTYPE html><html lang="en"><head> <link rel="stylesheet& ...
- LNMP的搭建 及地址转换
1. LNMP 先安装nginx yum -y install gcc openssl-devel pcre-devel wget http://nginx.org/download/ngin ...
- linux实用小命令--查看文本内容
一.cat命令 $ cat [参数]filename 这还有一些可以和cat命令一起用的参数,可能对你有所帮助. 1.-n 参数会所有的行加上行号: $ cat -n test1 2.这个功能在检查脚 ...
- Spring Boot Validation,既有注解不满足,我是怎么暴力扩展validation注解的
前言 昨天,我开发的代码,又收获了一个bug,说是界面上列表查询时,正常情况下,可以根据某个关键字keyword模糊查询,后台会去数据库 %keyword%查询(非互联网项目,没有使用es,只能这样了 ...
- 18.DjangoRestFramework学习一之restful规范、APIview、解析器组件、Postman等
一 预备知识 预备知识:django的CBV和FBV CBV(class based view):多用,简单回顾一下 FBV(function based view): CBV模式的简单操作:来个登陆 ...