商城项目-商品规格数据结构
1.商品规格数据结构
乐优商城是一个全品类的电商网站,因此商品的种类繁多,每一件商品,其属性又有差别。为了更准确描述商品及细分差别,抽象出两个概念:SPU和SKU,了解一下:
1.1.SPU和SKU
SPU:Standard Product Unit (标准产品单位) ,一组具有共同属性的商品集
SKU:Stock Keeping Unit(库存量单位),SPU商品集因具体特性不同而细分的每个商品
以图为例来看:
- 本页的 华为Mate10 就是一个商品集(SPU)
- 因为颜色、内存等不同,而细分出不同的Mate10,如亮黑色128G版。(SKU)
可以看出:
- SPU是一个抽象的商品集概念,为了方便后台的管理。
- SKU才是具体要销售的商品,每一个SKU的价格、库存可能会不一样,用户购买的是SKU而不是SPU
1.2.数据库设计分析
1.2.1.思考并发现问题
弄清楚了SPU和SKU的概念区分,接下来我们一起思考一下该如何设计数据库表。
首先来看SPU,大家一起思考下SPU应该有哪些字段来描述?
id:主键
title:标题
description:描述
specification:规格
packaging_list:包装
after_service:售后服务
comment:评价
category_id:商品分类
brand_id:品牌
似乎并不复杂,但是大家仔细思考一下,商品的规格字段你如何填写?
不同商品的规格不一定相同,数据库中要如何保存?
再看下SKU,大家觉得应该有什么字段?
id:主键
spu_id:关联的spu
price:价格
images:图片
stock:库存
颜色?
内存?
硬盘?
碰到难题了,不同的商品分类,可能属性是不一样的,比如手机有内存,衣服有尺码,我们是全品类的电商网站,这些不同的商品的不同属性,如何设计到一张表中?
1.2.2.分析规格参数
仔细查看每一种商品的规格你会发现:
虽然商品规格千变万化,但是同一类商品(如手机)的规格是统一的,有图为证:
华为的规格:
三星的规格:
也就是说,商品的规格参数应该是与分类绑定的。每一个分类都有统一的规格参数模板,但不同商品其参数值可能不同。
如下图所示:
1.2.3.SKU的特有属性
SPU中会有一些特殊属性,用来区分不同的SKU,我们称为SKU特有属性。如华为META10的颜色、内存属性。
不同种类的商品,一个手机,一个衣服,其SKU属性不相同。
同一种类的商品,比如都是衣服,SKU属性基本是一样的,都是颜色、尺码等。
这样说起来,似乎SKU的特有属性也是与分类相关的?事实上,仔细观察你会发现,SKU的特有属性是商品规格参数的一部分:
也就是说,我们没必要单独对SKU的特有属性进行设计,它可以看做是规格参数中的一部分。这样规格参数中的属性可以标记成两部分:
- 所有sku共享的规格属性(称为全局属性)
- 每个sku不同的规格属性(称为特有属性)
1.2.4.搜索属性
打开一个搜索页,我们来看看过滤的条件:
你会发现,过滤条件中的屏幕尺寸、运行内存、网路、机身内存、电池容量、CPU核数等,在规格参数中都能找到:
也就是说,规格参数中的数据,将来会有一部分作为搜索条件来使用。我们可以在设计时,将这部分属性标记出来,将来做搜索的时候,作为过滤条件。要注意的是,无论是SPU的全局属性,还是SKU的特有属性,都有可能作为搜索过滤条件的,并不冲突,而是有一个交集:
1.3.规格参数表
1.3.1.表结构
先看下规格参数表:
CREATE TABLE `tb_specification` (`category_id` bigint(20) NOT NULL COMMENT '规格模板所属商品分类id',`specifications` varchar(3000) NOT NULL DEFAULT '' COMMENT '规格参数模板,json格式',PRIMARY KEY (`category_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='商品规格参数模板,json格式。';
很奇怪是吧,只有两个字段。特别需要注意的是第二个字段:
- specificatons:规格参数模板,json格式
为什么是一个json?我们看下规格参数的格式:
如果按照传统数据库设计,这里至少需要3张表:
- group:代表组,与商品分类关联
- param_key:属性名,与组关联,一对多
- param_value:属性备选值,与属性名关联,一对多
这样程序的复杂度大大增加,但是提高了数据的复用性。
我们的解决方案是,采用json来保存整个规格参数模板,不需要额外的表,一个字符串就够了。
1.3.2.json结构分析
先整体看一下:
- 因为规格参数分为很多组,所以json最外层是一个数组。
- 数组中是对象类型,每个对象代表一个组的数据,对象的属性包括:
- group:组的名称
- params:该组的所有属性
接下来是params:
以主芯片
这一组为例:
group:注明,这里是主芯片
params:该组的所有规格属性,因为不止一个,所以是一个数组。这里包含四个规格属性:CPU品牌,CPU型号,CPU频率,CPU核数。每个规格属性都是一个对象,包含以下信息:
- k:属性名称
- searchable:是否作为搜索字段,将来在搜索页面使用,boolean类型
- global:是否是SPU全局属性,boolean类型。true为全局属性,false为SKU的特有属性
- options:属性值的可选项,数组结构。起约束作用,不允许填写可选项以外的值,比如CPU核数,有人添10000核岂不是很扯淡
- numerical:是否为数值,boolean类型,true则为数值,false则不是。为空也代表非数值
- unit:单位,如:克,毫米。如果是数值类型,那么就需要有单位,否则可以不填。
上面的截图中所有属性都是全局属性,我们来看看内存,应该是特有属性:
总结下:
- 规格参数分组,每组有多个参数
- 参数的
k
代表属性名称,没有值,具体的SPU才能确定值 - 参数会有不同的属性:是否可搜索,是否是全局、是否是数值,这些都用boolean值进行标记:
- SPU下的多个SKU共享的参数称为全局属性,用
global
标记 - SPU下的多个SKU特有的参数称为特有属性
- 如果参数是数值类型,用
numerical
标记,并且指定单位unit
- 如果参数可搜索,用
searchable
标记
- SPU下的多个SKU共享的参数称为全局属性,用
商城项目-商品规格数据结构相关推荐
- 商城项目-商品规格参数管理
2.商品规格参数管理 2.1.页面实现 页面比较复杂,这里就不带着大家去实现完整页面效果了,我们一起分析一下即可. 2.1.1.整体布局 打开规格参数页面,看到如下内容: 因为规格是跟商品分类绑定的, ...
- 谷粒商城商品规格数据结构学习笔记(SPUSKU)
谷粒商城商品规格数据结构学习笔记(SPU&SKU) SPU Standard Product Unit (标准产品单位) ,一组具有共同属性的商品集 SKU Stock Keeping Uni ...
- 商城-商品规格管理-商品规格数据结构
商城-商品规格管理-商品规格数据结构 1.商品规格数据结构 1.1.SPU和SKU 1.2.数据库设计分析 1.2.1.思考并发现问题 1.2.2.分析规格参数 1.2.3.SKU的特有属性 1.2. ...
- 微服务项目之电商--17.商品规格数据结构SPU和SKU
目录 1.商品规格数据结构 1.1.SPU和SKU 1.2.数据库设计分析 1.2.1.思考并发现问题 1.2.2.分析规格参数 1.2.3.SKU的特有属性 1.3.规格参数表 1.3.1.表结构 ...
- 电商项目——商品规格管理
商品规格管理 商品规格数据结构 淘淘商城是一个全品类的电商网站,因此商品的种类繁多,每一件商品,其属性又有差别.为了更准确描述商品及细分差别,抽象出两个概念:SPU和SKU SPU和SKU SPU:S ...
- 商品规格数据结构与商品表结构分析
商品规格数据结构与商品表结构分析: 1. 商品规格数据结构 1.1 规格属性内容 1.2 横表与数表 1.3 表结构 1.3.1 SpecGroup规格组 1.3.2 SpecParam规格参数 1. ...
- [golang gin框架] 16.Gin 商城项目-商品模块数据表ER图关系分析
1.数据表ER图 2.数据表相关 (1).商品分类表相关 1).数据表 -- ---------------------------- -- Table structure for goods_cat ...
- 商城项目商品列表页的渲染实现(含动图)
有了v-for循环,渲染商品列表简直不要太方便了,以前写一个商品列表页要一天,现在只需要几分钟,除了模拟数据会耗一点时间.这里可以了解下Mock模拟数据,它可使前端工程师独立于后端进行开发,在前端可以 ...
- vue商城:商品规格数据处理
后台接口返回的数据结构 在vue中,使用forEach()来处理成自己想要的数据 data() {return {show:false,//商品规格弹框price:'',//商品默认价格stock_n ...
最新文章
- PHP最简单写文件记日志当前时间
- 这是我看过,最好懂的神经网络
- vmware虚拟机环境里用linux和xp系统测试防火墙的nat转换
- RabbitMQ订阅者模式
- 『设计模式』Web程序开发最基本的编程模式--MVC编程模式
- 在所有浏览器下一次性测试您的网站
- 使用@OrderBy对Spring Data MongoDB集合进行排序
- 禁用win10触摸屏手势_Win10平板边缘滑动手势大全及开启/关闭方法
- OS X 使用技巧——轻松地调整窗口大小
- 力扣637. 二叉树的层平均值(JavaScript)
- 吴恩达深度学习4.3练习_Convolutional Neural Networks_Car detection
- 按Sybase的PowerDesigner工具设计的数据库模型 --- 解析生成能兼容多种数据库的相应的C#底层代码...
- 中标麒麟系统下(Neokylin7)达梦数据库(DM8)图形化安装
- 华为云怎么修改服务器密码,云服务器登陆密码如何修改
- 好不容易找到的一篇dva教程
- powershell 使用_如何使用PowerShell生成随机名称和电话号码
- 阿里云国际版服务器如何搭建区块链应用程序
- URL Extractor 4 for Mac(URL资源地址抓取器)特别版
- 怎样快速学习一门计算机编程语言?
- NFC framework introduce