商品模块是电商系统核心模块,本文主要讲解商品模块功能需求、术语概念、功能设计、数据结构、相关功能设计思路。
可以看到一种商品SPU包含多种SKU,SPU(SKU1、SKU2……SKU n),且SKU唯一。
商品模块一般包括商品、商品分类、商品规格管理,可能还有商品审核。商品模块比较复杂的地方在于商品参数、规格管理。
如果是全品类平台,不同行业商品存在不同参数,我们可以按行业构建参数模板。如果是垂直行业,如农产品、五金等,可以将商品参数直接存储商品表,存储商品表的问题在于如果参数比较多,那么商品表参数字段会很多,如果跨行业,冗余字段会比较多,但单表维护比较方便。前期建议不过渡设计,直接单表维护,后期需要可以再拆表,并将原商品表参数字段迁移到子表。
商品规格管理是商品模块比较重要的部分,一般有单规格、多规格。如果将系统商品规格设计成单规格,后期如果有多规格需求,系统扩展会比较麻烦,所以建议将系统设计成多规格方式或支持单规格、多规格两种方式。如果为了快速验证业务,项目很大程度上需要重写,行业类目需要,可以考虑用单规格方式以降低开发成本。
什么是单规格 以农产品大米为例,如果将大米按重量分成 2.5kg / 5kg,规格相对简单,只有一个层级;
什么是多规格 以服装为例,如T恤,有颜色(黑、白、黄、绿……),有尺寸(S、M、L……)、材质(棉、涤纶),规格有多个层级,比较复杂;
多规格字段数量具有不确定性,可采用JSON实现,如服装类商品; 规格-颜色(黑、白、红、黄、蓝); 规格-大小(S、M、L); * 规格-材质(纯棉、涤纶);
通过规格配置表、规格值表,两表可以完成规格数据存储,我们以最简单的基础字段作分析。
字段名 | 字段类型 | 字段说明 | 默认值 |
id | bigint | 规格id | |
values | json | 规格配置项,如:["黑","白","灰"] | |
product_id | bigint | 关联商品主键ID |
字段名 | 字段类型 | 字段说明 | 默认值 |
id | bigint | 规格值id | |
attr_values | json | 规格配置组合值,如:["黑","S"] | |
sale_amount | int | 零售价 | |
stock | int | 库存 | 0 |
product_id | bigint | 关联商品主键ID | |
sku | varchar | sku编码(也可简单用id代替) |
示例“:商品iPhone 15为例,分析具体数据存储
products 商品表
id | name |
1 | Iphone 15 |
product_attrs 商品规格配置表
id | name | values | product_id |
1 | 颜色 | ["金色","黑色"] | 1 |
2 | 存储 | ["256G","512G"] | 1 |
product_attr_vals 商品规格值表
id | attr_values | sale_amount | stcok | product_id | sku |
1 | ["金色","256G"] | 5499 | 200 | 1 | 001 |
2 | ["金色","512G"] | 6499 | 200 | 1 | 002 |
3 | ["黑色","256G"] | 5499 | 100 | 1 | 003 |
4 | ["黑色","512G"] | 6499 | 200 | 1 | 004 |
id | attr_values | sale_amount | stcok | product_id | sku |
1 | 1,3 | 5499 | 200 | 1 | 001 |
2 | 1,4 | 6499 | 200 | 1 | 002 |
3 | 2,3 | 5499 | 100 | 1 | 003 |
4 | 2,4 | 6499 | 200 | 1 | 004 |
建表SQL
CREATE TABLE products(
id INT NOT NULL AUTO_INCREMENT COMMENT '主键' ,
name VARCHAR(30) COMMENT '商品名称' ,
title VARCHAR(50) COMMENT '商品标题' ,
share_title VARCHAR(50) COMMENT '分享标题' ,
share_descip VARCHAR(50) COMMENT '分享描述' ,
shop_id INT NOT NULL DEFAULT 0 COMMENT '店铺ID' ,
mch_id INT NOT NULL DEFAULT 0 COMMENT '供应商ID' ,
category_id INT COMMENT '商品分类' ,
unit VARCHAR(15) COMMENT '单位' ,
sale_amount INT NOT NULL DEFAULT 0 COMMENT '零售价' ,
vip_amount INT NOT NULL DEFAULT 0 COMMENT '会员价' ,
marker_amount INT NOT NULL DEFAULT 0 COMMENT '市场价' ,
max_amount INT NOT NULL DEFAULT 0 COMMENT '最高价' ,
min_amount INT NOT NULL DEFAULT 0 COMMENT '最低价' ,
content TEXT COMMENT '商品详情' ,
logo VARCHAR(150) COMMENT '商品LOGO' ,
orderby MEDIUMINT(5) NOT NULL DEFAULT 99 COMMENT '排序' ,
status TINYINT(2) NOT NULL DEFAULT 0 COMMENT '状态' ,
stock INT NOT NULL DEFAULT 0 COMMENT '库存' ,
sale INT NOT NULL DEFAULT 0 COMMENT '销量' ,
is_delete TINYINT(2) NOT NULL DEFAULT 0 COMMENT '是否删除' ,
check_status TINYINT(2) NOT NULL DEFAULT 0 COMMENT '审核状态' ,
shipping_template_id INT NOT NULL DEFAULT 0 COMMENT '运费模板ID' ,
admin_id INT NOT NULL DEFAULT 0 COMMENT '操作员' ,
created_at DATETIME COMMENT '创建时间' ,
updated_at DATETIME COMMENT '更新时间' ,
PRIMARY KEY (id)
) COMMENT = '商品表';
CREATE TABLE product_attrs(
id INT NOT NULL AUTO_INCREMENT COMMENT '主键' ,
name VARCHAR(30) COMMENT '规格名' ,
product_id INT NOT NULL DEFAULT 0 COMMENT '商品ID' ,
values JSON COMMENT '规格配置项' ,
created_at VARCHAR(30) COMMENT '创建时间' ,
updated_at VARCHAR(30) COMMENT '更新时间' ,
PRIMARY KEY (id)
) COMMENT = '商品规格配置表';
CREATE TABLE product_attr_vals(
id INT NOT NULL AUTO_INCREMENT COMMENT '主键' ,
product_id INT NOT NULL DEFAULT 0 COMMENT '商品ID' ,
attr_vals JSON COMMENT '规格配置项组合值' ,
sale_amount INT NOT NULL DEFAULT 0 COMMENT '零售价' ,
vip_amount INT NOT NULL DEFAULT 0 COMMENT '会员价' ,
market_amount INT NOT NULL DEFAULT 0 COMMENT '市场价' ,
stock INT NOT NULL DEFAULT 0 COMMENT '库存' ,
sale INT NOT NULL DEFAULT 0 COMMENT '销量' ,
thumb VARCHAR(150) COMMENT '预览图' ,
orderby MEDIUMINT(5) NOT NULL DEFAULT 99 COMMENT '排序' ,
created_at DATETIME COMMENT '创建时间' ,
updated_at DATETIME COMMENT '更新时间' ,
PRIMARY KEY (id)
) COMMENT = '商品规格值表';
http://blog.xqlee.com/article/1713828816184414210.html