WMS系统改造一
背景
原有的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;
···