背景
原有的WMS系统已经使用了多年,虽然功能和流程完善。但是面对市场的多变,还是应付不过来。原来的系统架构算是一个大的集合,有servlet+JSP +自研ORM框架 、springMVC+JPA/mybaties,SpringBoot + theamleaf,springBoot + vue;这样庞大复杂的系统架构运行10多年,修修补补的过日子,对开发和运维提高难度。现在正是疫情期间,在家就琢磨下 使用springCloud alibaba来进行下改造。
概念温习
wms的基础是商品的库存管理,那么我们就需要对数据库商品来进行下改造:首先来明确下基本的概念。一下概念网上理解加自己的理解。
SKU: stock keeping unit.以库存视角看商品(一箱可乐和一打可乐由于库存包装不同是不同的SKU).
SPU:standard product unit.体现商品标准变化。电商平台,一个基本产品对应多个卖家,展示方案:展示基本 产品—click—>>展示产品后所售商家的商品。
goods:商品,某个商家出售某个SPU,这个东西就叫商品。相对产品,数据层增加了价格,促销活动,运费等信息。
item: 代指宝贝,一个item代指多个商品(例如不同颜色的IPhone6S手机)。虽然前台展示灵活,但是底层数据混乱。
btw: 对于服装,同一产品可能有不同颜色不同尺码。那么SPU对应 ? 服装款式+颜色 | |服装款式+颜色+尺码。需要根据自身业务来处理。
SPU与SKU的关系
1.在商品模型设计中,要表述完一个完整的商品要包含SPU和SKU的属性。
2.SPU属性与商品库存无关,仅仅用来描述一个商品,可以称之为”描述属性“。
3.SKU属性与商品的库存和价格有关,每一种SKU属性都有自己的库存和价格,称之为“销售属性”。
常见SPU、item和SKU的属性关系
数据模型
这种设计是将SPU属性和SKU属性都挂在商品的类目下,这样的好处是方便商家维护商品属性,不用针对每一个商品都建一套自己的SPU和SKU,因为同一类目下的商品,SPU属性项,SKU属性项几乎是一样的,不一样的只是属性值。下面数据库模型中,sku_attribute表和spu_attribute表都只是维护属性的名称、排序和展示样式而已,最终决定一个商品属性的数据是goods_spu_attribute_value和 goods_sku_option_group表。
相关建表SQL:
- good_catagroy 商品类目表
- spu_attribute SPU属性表
- sku_attribute SKU属性表
- sku_option SKU可选项
- goods_master 商品主表
- goods_spu_attribute_value 商品SPU属性表
- goods_sku 商品SKU表
- goods_sku_option_group 商品SKU选项组合表
···
作者:lalala
链接:https://www.zhihu.com/question/19841574/answer/665411848
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
– Table structure for goods
DROP TABLE IF EXISTS goods
;
CREATE TABLE goods
(
id
varchar(32) NOT NULL COMMENT ‘商品ID’,
category_id
varchar(32) DEFAULT NULL COMMENT ‘类目叶子节点ID’,
merchant_id
varchar(32) DEFAULT NULL COMMENT ‘商户ID’,
brand_id
varchar(32) DEFAULT NULL COMMENT ‘品牌ID’,
goods_code
varchar(32) DEFAULT NULL COMMENT ‘商品编号’,
front_name
varchar(255) DEFAULT NULL COMMENT ‘前端名称’,
back_name
varchar(255) DEFAULT NULL COMMENT ‘后端名称’,
goods_type
tinyint(1) DEFAULT NULL COMMENT ‘商品类型(0单品,1套餐)’,
goods_status
tinyint(1) DEFAULT NULL COMMENT ‘状态(-1下架,0新建,1上架)’,
goods_desc
varchar(512) DEFAULT NULL COMMENT ‘描述’,
cover_pic
varchar(255) DEFAULT NULL COMMENT ‘封面图’,
key_word
varchar(32) DEFAULT NULL COMMENT ‘关键字’,
create_user
varchar(32) DEFAULT NULL COMMENT ‘创建人’,
create_date
datetime(0) DEFAULT NULL COMMENT ‘创建时间’,
update_user
varchar(32) DEFAULT NULL COMMENT ‘修改人’,
update_date
datetime(0) DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT ‘修改时间’,
PRIMARY KEY (id
) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = ‘商品主表’ ROW_FORMAT = Dynamic;
– Table structure for goods_category
DROP TABLE IF EXISTS goods_category
;
CREATE TABLE goods_category
(
id
varchar(32) NOT NULL COMMENT ‘类目ID’,
name
varchar(32) DEFAULT NULL COMMENT ‘类目名称’,
level
int(11) DEFAULT NULL COMMENT ‘类目级别(1一级,2二级,3三级,…)’,
has_child
tinyint(1) DEFAULT NULL COMMENT ‘是否存在子节点(0否,1是)’,
parent_id
varchar(32) DEFAULT NULL COMMENT ‘父节点ID’,
create_user
varchar(32) DEFAULT NULL COMMENT ‘创建人’,
create_date
datetime(0) DEFAULT NULL COMMENT ‘创建时间’,
update_user
varchar(32) DEFAULT NULL COMMENT ‘修改人’,
update_date
datetime(0) DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT ‘修改时间’,
PRIMARY KEY (id
) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = ‘商品类目表’ ROW_FORMAT = Dynamic;
– Table structure for goods_sku
DROP TABLE IF EXISTS goods_sku
;
CREATE TABLE goods_sku
(
id
varchar(32) NOT NULL COMMENT ‘商品SKUID’,
goods_id
varchar(32) DEFAULT NULL COMMENT ‘商品ID’,
sku_code
varchar(32) DEFAULT NULL COMMENT ‘SKU码’,
cost_price
int(11) DEFAULT NULL COMMENT ‘入库价(分)’,
sale_price
int(11) DEFAULT NULL COMMENT ‘销售价(分)’,
disc_price
int(11) DEFAULT NULL COMMENT ‘折扣价(分)’,
stock
int(11) DEFAULT NULL COMMENT ‘库存’,
create_user
varchar(32) DEFAULT NULL COMMENT ‘创建人’,
create_date
datetime(0) DEFAULT NULL COMMENT ‘创建时间’,
update_user
varchar(32) DEFAULT NULL COMMENT ‘修改人’,
update_date
datetime(0) DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT ‘修改时间’,
PRIMARY KEY (id
) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = ‘商品SKU表’ ROW_FORMAT = Dynamic;
– Table structure for goods_sku_option_group
DROP TABLE IF EXISTS goods_sku_option_group
;
CREATE TABLE goods_sku_option_group
(
id
varchar(32) NOT NULL COMMENT ‘ID’,
goods_id
varchar(32) DEFAULT NULL COMMENT ‘商品ID’,
sku_id
varchar(32) DEFAULT NULL COMMENT ‘SKUID’,
sku_option_id
varchar(32) DEFAULT NULL COMMENT ‘SKU选项ID’,
create_user
varchar(32) DEFAULT NULL COMMENT ‘创建人’,
create_date
datetime(0) DEFAULT NULL COMMENT ‘创建时间’,
update_user
varchar(32) DEFAULT NULL COMMENT ‘修改人’,
update_date
datetime(0) DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT ‘修改时间’,
PRIMARY KEY (id
) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = ‘商品SKU选项组合表’ ROW_FORMAT = Dynamic;
– Table structure for goods_spu_attribute_value
DROP TABLE IF EXISTS goods_spu_attribute_value
;
CREATE TABLE goods_spu_attribute_value
(
id
varchar(32) NOT NULL COMMENT ‘SPU属性值ID’,
goods_id
varchar(32) DEFAULT NULL COMMENT ‘商品ID’,
spu_attribute_id
varchar(32) DEFAULT NULL COMMENT ‘私有属性ID’,
spu_attribute_value
varchar(512) DEFAULT NULL COMMENT ‘属性值’,
value_type
tinyint(1) DEFAULT NULL COMMENT ‘属性值类型(0普通字符串,1时间戳格式,2时间格式字符串(yyyy-MM-dd HH:mm:ss),…)’,
value_desc
varchar(255) DEFAULT NULL COMMENT ‘属性值说明’,
sort
int(11) DEFAULT NULL COMMENT ‘排序(1最前)’,
create_user
varchar(32) DEFAULT NULL COMMENT ‘创建人’,
create_date
datetime(0) DEFAULT NULL COMMENT ‘创建时间’,
update_user
varchar(32) DEFAULT NULL COMMENT ‘修改人’,
update_date
datetime(0) DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT ‘修改时间’,
PRIMARY KEY (id
) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = ‘商品SPU属性值表’ ROW_FORMAT = Dynamic;
– Table structure for sku_attribute
DROP TABLE IF EXISTS sku_attribute
;
CREATE TABLE sku_attribute
(
id
varchar(32) NOT NULL COMMENT ‘SKU属性ID’,
category_id
varchar(32) DEFAULT NULL COMMENT ‘类目叶子节点ID’,
front_name
varchar(32) DEFAULT NULL COMMENT ‘属性名称(前端)’,
back_name
varchar(32) DEFAULT NULL COMMENT ‘属性名称(后端)’,
attr_desc
varchar(512) DEFAULT NULL COMMENT ‘属性说明’,
sort
int(11) DEFAULT NULL COMMENT ‘排序(1最前)’,
create_user
varchar(32) DEFAULT NULL COMMENT ‘创建人’,
create_date
datetime(0) DEFAULT NULL COMMENT ‘创建时间’,
update_user
varchar(32) DEFAULT NULL COMMENT ‘修改人’,
update_date
datetime(0) DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT ‘修改时间’,
PRIMARY KEY (id
) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = ‘SKU属性表’ ROW_FORMAT = Dynamic;
– Table structure for sku_option
DROP TABLE IF EXISTS sku_option
;
CREATE TABLE sku_option
(
id
varchar(32) NOT NULL COMMENT ‘SKU可选项ID’,
sku_attribute_id
varchar(32) DEFAULT NULL COMMENT ‘SKU属性ID’,
option_name
varchar(32) DEFAULT NULL COMMENT ‘可选项名称’,
option_desc
varchar(512) DEFAULT NULL COMMENT ‘可选项说明’,
sort
int(11) DEFAULT NULL COMMENT ‘排序(1最前)’,
create_user
varchar(32) DEFAULT NULL COMMENT ‘创建人’,
create_date
datetime(0) DEFAULT NULL COMMENT ‘创建时间’,
update_user
varchar(32) DEFAULT NULL COMMENT ‘修改人’,
update_date
datetime(0) DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT ‘修改时间’,
PRIMARY KEY (id
) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = ‘SKU可选项表’ ROW_FORMAT = Dynamic;
– Table structure for spu_attribute
DROP TABLE IF EXISTS spu_attribute
;
CREATE TABLE spu_attribute
(
id
varchar(32) NOT NULL COMMENT ‘SPU属性ID’,
category_id
varchar(32) DEFAULT NULL COMMENT ‘类目叶子节点ID’,
front_name
varchar(32) DEFAULT NULL COMMENT ‘属性名称(前端)’,
back_name
varchar(32) DEFAULT NULL COMMENT ‘属性名称(后端)’,
input_style
int(11) DEFAULT NULL COMMENT ‘属性值输入样式(0文本输入框,1时间控件,2下拉选项,…)’,
attr_desc
varchar(512) DEFAULT NULL COMMENT ‘属性说明’,
sort
int(11) DEFAULT NULL COMMENT ‘排序(1最前)’,
create_user
varchar(32) DEFAULT NULL COMMENT ‘创建人’,
create_date
datetime(0) DEFAULT NULL COMMENT ‘创建时间’,
update_user
varchar(32) DEFAULT NULL COMMENT ‘修改人’,
update_date
datetime(0) DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT ‘修改时间’,
PRIMARY KEY (id
) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = ‘SPU属性表’ ROW_FORMAT = Dynamic;
SET FOREIGN_KEY_CHECKS = 1;
···