如何设计电商SPU与SKU表以及相关的表?

这篇具有很好参考价值的文章主要介绍了如何设计电商SPU与SKU表以及相关的表?。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、先了解SPU及SKU的相关概念:

我们在开发电商项目时,必须首先要了解两个概念,SPU与SKU是什么?这也是设计一个好的电商系统的必要前提。商系统实现了什么功能,大数情况下都是和商品模块相关联的。因此商品模块本身的实现要足够抽象、灵活、易于扩展,这样才能满足各种业务需求。而这一切的基础都建立在SPU和SKU的设计,所以说这两个概念,是设计好电商系统的关键。那SKU和SPU又分别是什么东西呢?

1、什么是SPU

SPU (Standard Product Unit)即标准化产品单位,是商品信息聚合的最小单位,是一组可复用、易检索的标准化信息的集合,该集合描述了一个产品的特性。通俗点讲,属性值、特性相同的商品就可以称为一个SPU。

2、什么是SKU

SKU(stock keeping unit)即库存量单位,是物理上不可分割的最小存货单元。正因为它在物理上是不可分割的最小存货单元,所以也就可以通过SKU来确定具体的货物存量。

  • 如一件M码(四个尺码:S码、M码、L码、X码)的粉色(三种颜色:粉色、黄色、黑色)Zara女士风衣,其中M码、粉色就是一组SKU的组合。

  • SKU在生成时, 会根据属性生成相应的笛卡尔积,根据一组SKU可以确定商品的库存情况,那么上面的Zara女士风衣一共有4 * 3 = 12个SKU组合。

3、SPU和SKU的关联与区别

下面我们通过一个具体的电商流程来搞懂SPU和SKU。

常规的业务流程是这样的:用户通过一个标有商品简略信息的入口点进一个商品页面,这时会有几个不同的配置、颜色、尺寸供选择,用户选择时需要判断这个商品是否有库存。

这一系列操作中一个商品的页面会是一个SPU,最后检查的库存就是SKU。

但是为什么业务的流程是这样的呢?我们通过下图的来进行分析。如何设计电商SPU与SKU表以及相关的表?如何设计电商SPU与SKU表以及相关的表?

通过上图某东关于华为笔记本电脑MateBook D 14的商品页面我们不难在图中发现红框是SPU信息,蓝框是SKU信息。但是为什么是这样的呢?回顾一下这二者的概念:

SPU:标准化产品单位    SKU:库存量单位

那么上图红框中的信息就是标准化产品单位,我们可以这样理解标准化产品单位,无论选择购买什么样配置、颜色的华为笔记本电脑MateBook D 14, 首先它一定是一部华为笔记本电脑。而不同配置、颜色之间的华为笔记本电脑一定具有一些相同的属性,这些属性可以称之为公共属性,那么由这些公共属性组合而成的集合,就可以称为该产品的SPU。此时华为笔记本电脑就是这个SPU的名称。

通过在某东查看“规格与包装”来获得具体的SPU信息。如下图所示::
如何设计电商SPU与SKU表以及相关的表?

正是因为有了这个SPU我们在说起华为笔记本电脑MateBook D 14的时候,我们就能知道这是一部怎样的电脑了,但是这部华为笔记本电脑MateBook D 14的具体颜色,容量等信息对方是不清楚的。这是因为**SPU只定义了一个产品,但不是商品。**一个SPU可以拥有多个SKU(不同规格组合),SKU和SPU是一种多对一的关系,SKU才是定义了产品下的具体商品。回到最开始的图我们来细说。

如何设计电商SPU与SKU表以及相关的表?

我们通过点击选择红框中的不同规格,可以组合出不同的华为笔记本电脑MateBook D 14商品(SKU),同时价格、库存量会有相应的变化。因为SPU+SKU才会得到一个具体的商品。

这就跟你去手机店跟柜员说我要买手机或者我要买华为笔记本电脑MateBook D 14,多少钱,人家柜员需要反问你啥电脑、什么型号、多大内存、啥颜色不然没法给你报价一个道理。

那SKU为什么称之为“库存量单位”?因为在采购商品的时候,不可能只写华为笔记本电脑MateBook D 14,相反采购单是根据颜色、容量、规格等SKU组合来区分采购的。入库也是根据不同的SKU组合来入库的,所以SKU称之为库存量单位。

就好比华为笔记本电脑MateBook D 14上市的时候,16GB+512GB的容量是缺货状态的,但其他容量是正常供应的。一个SPU拥有的规格越多,可以组合出来的SKU商品就越多,就拿华为笔记本电脑MateBook D 14中颜色和版本这两个规格来举例,每部华为笔记本电脑MateBook D 14最多可以有3*3=9种SKU组合,就代表华为笔记本电脑MateBook D 14这个产品下有9种商品,而每种SKU组合又可以分别定价。

总结

  • SPU和SKU都是属性的集合,SPU是公共属性的集合,SKU是独有属性的集合。
  • SPU定义了产品,但不是商品,产品描述了商品的公共属性,不影响库存和价格。
  • SKU定义了商品,是在SPU的基础上描述了其独有的属性,一个SPU可以拥有多个SKU,影响库存和价格。
  • SKU是库存量的最小存货单位,也是用户能够选择的最小单位是实际购买的商品。每一个sku可以有独立的价格,当库存减少时减少的实际是sku的库。
  • 也可以这样认为只有确定了一个SPU才能获得关于这个SPU的所有SKU信息,而不能通过一组不同的SKU来确定SPU信息。

4、什么是商品的销售属性与基本属性,什么是基本属性的分组

4.1、基本属性分组(主要针对SPU来说)包括:

如以电脑为例,基本属性分组包括:

主体 、基本信息、机器规格、芯片、屏幕

如图:
如何设计电商SPU与SKU表以及相关的表?

4.2、基本属性(主要针对SPU来说)包括:

如以电脑为例,基本属性包括:

入网型号 上市年份 机身颜色 机身长度(mm) 机身材质工艺 CPU品牌 CPU型号

如图:

如何设计电商SPU与SKU表以及相关的表?

4.3、销售属性(主要针对SKU来说)包括:

如以手机为例,销售属性包括:

颜色分类 内存大小 版本

如图,红色框内的是销售属性
如何设计电商SPU与SKU表以及相关的表?

二、SPU与SKU表及其相关联的表

1、首先要设计产品分类表

产品分类是电商商品表最核心的内容之一,无论是SPU、SKU、还是商品属性都会关联到

产品分类表主要有:分类名称、父分类id、层级、是否显示、排序

实体类:

@Data
@TableName("pms_category")
public class CategoryEntity implements Serializable {
	private static final long serialVersionUID = 1L;

	/**
	 * 分类id
	 */
	@TableId
	private Long catId;
	/**
	 * 分类名称
	 */
	private String name;
	/**
	 * 父分类id
	 */
	private Long parentCid;
	/**
	 * 层级
	 */
	private Integer catLevel;
	/**
	 * 是否显示[0-不显示,1显示]
	 */
	@TableLogic(value = "1", delval = "0")
	private Integer showStatus;
	/**
	 * 排序
	 */
	private Integer sort;
	/**
	 * 图标地址
	 */
	private String icon;
	/**
	 * 计量单位
	 */
	private String productUnit;
	/**
	 * 商品数量
	 */
	private Integer productCount;

	@JsonInclude(value = JsonInclude.Include.NON_EMPTY)
	@TableField(exist = false)
	private List<CategoryEntity> children;

}

2、SPU信息表

SPU信息表最主要有:商品名称、商品描述、 所属分类id、品牌id、上架状态

实体类:

@Data
@TableName("pms_spu_info")
public class SpuInfoEntity implements Serializable {
	private static final long serialVersionUID = 1L;

	/**
	 * 商品id
	 */
	@TableId
	private Long id;
	/**
	 * 商品名称
	 */
	private String spuName;
	/**
	 * 商品描述
	 */
	private String spuDescription;
	/**
	 * 所属分类id
	 */
	private Long catalogId;
	/**
	 * 品牌id
	 */
	private Long brandId;
	
	@TableField(exist = false)
	private String brandName;
	/**
	 * 
	 */
	private BigDecimal weight;
	/**
	 * 上架状态[0 - 下架,1 - 上架]
	 */
	private Integer publishStatus;
	/**
	 * 
	 */
	private Date createTime;
	/**
	 * 
	 */
	private Date updateTime;

}

3、SKU信息表

SKU信息表最主要有:sku名称、sku介绍描述、 所属分类id、品牌id、标题、副标题(下图中的蓝色框的内容)

如何设计电商SPU与SKU表以及相关的表?

实体类:

@Data
@TableName("pms_sku_info")
public class SkuInfoEntity implements Serializable {
	private static final long serialVersionUID = 1L;

	/**
	 * skuId
	 */
	@TableId
	private Long skuId;
	/**
	 * spuId
	 */
	private Long spuId;
	/**
	 * sku名称
	 */
	private String skuName;
	/**
	 * sku介绍描述
	 */
	private String skuDesc;
	/**
	 * 所属分类id
	 */
	private Long catalogId;
	/**
	 * 品牌id
	 */
	private Long brandId;
	/**
	 * 默认图片
	 */
	private String skuDefaultImg;
	/**
	 * 标题
	 */
	private String skuTitle;
	/**
	 * 副标题
	 */
	private String skuSubtitle;
	/**
	 * 价格
	 */
	private BigDecimal price;
	/**
	 * 销量
	 */
	private Long saleCount;

}

4、Attr属性表

Attr属性表最主要有:属性名、 是否需要检索、 值类型[0-为单个值,1-可以选择多个值]、可选值列表[用逗号分隔]、属性类型[0-销售属性,1-基本属性]、所属分类

如何设计电商SPU与SKU表以及相关的表?

实体类:

@Data
@TableName("pms_attr")
public class AttrEntity implements Serializable {
	private static final long serialVersionUID = 1L;

	/**
	 * 属性id
	 */
	@TableId
	private Long attrId;
	/**
	 * 属性名
	 */
	private String attrName;
	/**
	 * 是否需要检索[0-不需要,1-需要]
	 */
	private Integer searchType;
	/**
	 * 值类型[0-为单个值,1-可以选择多个值]
	 */
	private Integer valueType;
	/**
	 * 属性图标
	 */
	private String icon;
	/**
	 * 可选值列表[用逗号分隔]
	 */
	private String valueSelect;
	/**
	 * 属性类型[0-销售属性,1-基本属性
	 */
	private Integer attrType;
	/**
	 * 启用状态[0 - 禁用,1 - 启用]
	 */
	private Long enable;
	/**
	 * 所属分类
	 */
	private Long catelogId;
	/**
	 * 快速展示【是否展示在介绍上;0-否 1-是】,在sku中仍然可以调整
	 */
	private Integer showDesc;

}

5、AttrGroup属性组表

AttrGroup属性组表最主要有:组名、排序、所属分类id

如何设计电商SPU与SKU表以及相关的表?

实体类

@Data
@TableName("pms_attr_group")
public class AttrGroupEntity implements Serializable {
	private static final long serialVersionUID = 1L;

	/**
	 * 分组id
	 */
	@TableId
	private Long attrGroupId;
	/**
	 * 组名
	 */
	private String attrGroupName;
	/**
	 * 排序
	 */
	private Integer sort;
	/**
	 * 描述
	 */
	private String descript;
	/**
	 * 组图标
	 */
	private String icon;
	/**
	 * 所属分类id
	 */
	private Long catelogId;

	/**
	 * 分类路径,用于回显(1,2,3),表示祖父id = 1, 父id = 2, 当前ID 3
	 */
	@TableField(exist = false)
	private List<Long> catelogPath;

}

三、SPU表与SKU表及其相关的表关系图:

如何设计电商SPU与SKU表以及相关的表?

源码下载:
https://gitee.com/charlinchenlin/koo-erp文章来源地址https://www.toymoban.com/news/detail-488514.html

到了这里,关于如何设计电商SPU与SKU表以及相关的表?的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • RabbitMQ鉴权设计以及相关探讨

    鉴权,分别由 鉴 和 权 组成 鉴 : 表示身份认证,认证相关用户是否存在以及相关的用户名和密码是否一致 权 : 完成身份的 鉴 后,还需要判断用户是否有相关操作的权限。 因此对于某一个用户来说,通常情况下,需要完成 鉴 和 权 才能够满足一个完整的业务场景,因此

    2024年02月20日
    浏览(31)
  • 【ML】了解 LightGBM 参数(以及如何调整)

    我已经使用lightGBM一段时间了。这是我解决大多数结构化数据问题的首选算法。令人敬畏的功能列表很长,如果您还没有,我建议您看一下。 但我一直很想了解哪些参数对性能影响最大,以及我应该如何调整 lightGBM 参数以充分利用它。 我想我应该做一些研究,更多地了解

    2024年02月05日
    浏览(38)
  • 【MySQL】带你了解MySQL & 如何学习MySQL以及MySQL的用途以及意义

             目录  1 MySQL的起源和发展 1.0.1 数据库管理系统  1.1 MySQL的起源 命名由来: 1.2 MySQL的发展历程 2 什么是MySQL? 2.1 数据库 2.1.1 我们之前存储数据的格式: 2.1.2 使用数据库的目的: 2.1.3 数据库分类 2.2 SQL语句 2.2.1 为什么要SQL语句 2.2.2 SQL语句分类  3 怎么样学习My

    2023年04月24日
    浏览(54)
  • mysql、clickhouse查询数据库所有的表以及字段信息

    mysql查询数据库所有的表以及字段信息 SELECT     table_schema 数据库名,   table_name 表名,   COLUMN_NAME 列名,   COLUMN_TYPE 数据类型,   DATA_TYPE 字段类型,   CHARACTER_MAXIMUM_LENGTH 长度,   IS_NULLABLE 是否为空,   COLUMN_DEFAULT 默认值,   COLUMN_COMMENT 备注  FROM  INFORMATION_SCHEMA.COLUMNS where -- tab

    2024年02月08日
    浏览(72)
  • PostgreSQL如何创建表以及相关的约束?

    最简单的建表语句: 示例: 一般的表都有主键,如果表的主键只是由一个字段组成的,则可以通过直接在字段定义后面加上“PRIMARY KEY”来指定,示例如下: 如果主键由两个及以上的字段组成(称为复合主键),这时就不能使用上面的语法了,而需要使用约束子句的

    2024年02月09日
    浏览(46)
  • 360勒索病毒:了解最新变种.360,以及如何保护您的数据

    尊敬的读者: 近期,一种名为.360勒索病毒的威胁肆虐网络,给个人和企业带来了巨大的损失。本文将深入介绍.360勒索病毒的特征、恢复被加密数据的方法,并提供一系列有效的预防措施,助你在数字世界中远离这一威胁。在面对被勒索病毒攻击导致的数据文件加密问题时,

    2024年01月18日
    浏览(40)
  • PHP 如何设计一个高安全的电商平台:淘宝/京东商品类API封装接口

    如何保证API接口安全 接口的安全性主要围绕Token、Timestamp和Sign三个机制展开设计,保证接口的数据不会被篡改和重复调用,下面具体来看: Token授权机制 :用户使用用户名密码登录后服务器给客户端返回一个Token(通常是UUID),并将Token-UserId以键值对的形式存放在缓存服务

    2024年02月09日
    浏览(63)
  • 查看SQL Server的表字段类型、长度、描述以及是否可为null

    本文参考:https://blog.csdn.net/josjiang1/article/details/80558068。 也可以直接点击这里文章链接: sql server查询表结构(字段名,数据类型,长度,描述,是否允许为空,是否为主键)。 小步测试 先查询表的ID 2. 查询表的信息 对于我来说足够了。 组合一下 将上面两句组合一下: 参

    2024年01月22日
    浏览(44)
  • git如何忽略指定文件以及gitignore相关知识

    文章概要 :本文主要介绍了git中如何忽略指定文件,包括已经commit了的文件。解释了gitignore文件的写法以及提供了常见的gitignore模版。 本文内容来自:谷流仓AI - ai.guliucang.com 在平常写代码使用git的过程中,我们项目有些文件是不适合提交到仓库的,因此需要让git忽略这些文

    2024年04月25日
    浏览(46)
  • Vue如何创建一个新页面以及相关路由配置详解

    前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。【宝藏入口】。 在Vue.js中,路由配置是通过使用Vue Router来完成的。以下是Vue路由配置的基本语法格式: 在上面的代码中,有几个重要的属性和概念: 这些路由配置会被传递给 VueR

    2024年01月22日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包