电商系统商品规格模块设计_实现商品多级规格

位置:首页>文章>详情   分类: 教程分享 > Java教程   阅读(615)   2023-10-16 16:45:19

简介

商品模块是电商系统核心模块,本文主要讲解商品模块功能需求、术语概念、功能设计、数据结构、相关功能设计思路。

需求分析

  1. 电商系统后台可以管理商品(功能需求);
  2. 管理商品包括添加、修改、上下架、删除、审核等动作(操作行为);
  3. 添加修改商品时,每种商品有不同的字段、参数、图片、规格、价格(字段属性);

术语概念

  1. SPU:Standard Product Unit(标准化产品单元),一种商品,各种规格集合,如:iPhone 12;
  2. SKU:Stock Keeping Unit(库存量单位),也称单品,一种商品的具体规格,如:一部 黑色 128G 的iPhone 12 手机,黑色 + 128G 就是商品的具体规格。

可以看到一种商品SPU包含多种SKU,SPU(SKU1、SKU2……SKU n),且SKU唯一。

功能设计

商品模块一般包括商品、商品分类、商品规格管理,可能还有商品审核。商品模块比较复杂的地方在于商品参数、规格管理。

关于商品参数

  • 商品参数仅用于商品信息展示,一般不参与实际业务逻辑;
  • 手机参数关注点是内存、存储、摄像头、CPU等;
  • 手表参数关注点是表盘材质、表镜材质、适用人群、是否防水;
  • 化妆品参数关注点是功能、肤质、产地;

如果是全品类平台,不同行业商品存在不同参数,我们可以按行业构建参数模板。如果是垂直行业,如农产品、五金等,可以将商品参数直接存储商品表,存储商品表的问题在于如果参数比较多,那么商品表参数字段会很多,如果跨行业,冗余字段会比较多,但单表维护比较方便。前期建议不过渡设计,直接单表维护,后期需要可以再拆表,并将原商品表参数字段迁移到子表。

关于商品规格

商品规格管理是商品模块比较重要的部分,一般有单规格、多规格。如果将系统商品规格设计成单规格,后期如果有多规格需求,系统扩展会比较麻烦,所以建议将系统设计成多规格方式或支持单规格、多规格两种方式。如果为了快速验证业务,项目很大程度上需要重写,行业类目需要,可以考虑用单规格方式以降低开发成本。

什么是单规格 以农产品大米为例,如果将大米按重量分成 2.5kg / 5kg,规格相对简单,只有一个层级;

什么是多规格 以服装为例,如T恤,有颜色(黑、白、黄、绿……),有尺寸(S、M、L……)、材质(棉、涤纶),规格有多个层级,比较复杂;

数据结构

多规格字段数量具有不确定性,可采用JSON实现,如服装类商品; 规格-颜色(黑、白、红、黄、蓝); 规格-大小(S、M、L); * 规格-材质(纯棉、涤纶);

通过规格配置表、规格值表,两表可以完成规格数据存储,我们以最简单的基础字段作分析。

products 商品表

商品表

product_attrs 商品规格配置表

字段名 字段类型 字段说明 默认值
id bigint 规格id  
values json 规格配置项,如:["黑","白","灰"]  
product_id bigint 关联商品主键ID  

 

product_attr_vals 商品规格值表

字段名 字段类型 字段说明 默认值
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

 

  1. 如果觉得 2 表维护繁琐,可以将 product_attrs 表冗余至 products 表字段,但products表存储会增大;
  2. 对于属性值存储类型,有些喜欢用text / varchar存储,Mysql 5.7及以上支持JSON类型,可以考虑直接采用JSON存储;
  3. 价格字段采用了int类型,也可以采用decimal类型,int类型可以降低精度计算问题;(微信支付采用整型,支付宝采用浮点型)
  4. 如果不想用JSON存储,可以将规格属性映射成数字,如给具体的颜色、尺寸、款式属性标记成1、2、3(唯一)……通过数字组合产生对应SKU,那么上面 product_attr_vals 商品规格值表变成如下,但这种方式在DB层的数据可读性比较差。
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

 

其它商品字段参考

  • merchant_id 供应商ID
  • shop_id 店铺ID
  • share_title 分享标题,用于微信分享
  • share_descrip 分享描述
  • category_id 商品分类ID
  • unit 单位
  • vip_amount 会员价
  • market_amount 市场价
  • max_amount / min_amount 最大/最小价格
  • content 图文详情
  • logo 商品图
  • orderby 排序
  • status 状态(上架、下架)
  • stock 总库存(展示用)
  • sale 销售量(还可以细分真实、虚拟)
  • is_delete 是否删除(逻辑删除)
  • check_stats 审核状态
  • admin_id 操作员

 

组合商品

  • TODO...

建表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 = '商品规格值表';

 

地址:https://www.leftso.com/article/1713828816184414210.html

相关阅读

介绍在本教程中,我们将探索另一种流行的行为设计模式 - 状态设计模式
一、前言1、SSO说明SSO英文全称Single Sign On,单点登录
问题描述最近网站被运营商劫持很严重,忍受不了,全站上了HTTPS
java 高并发web系统解决方案架构设计
策略模式简介策略设计模式是一种行为模式,其中我们有多种算法/策略来实现任务,以及使用哪种算法/策略供客户选择
以前我们看过工厂和抽象工厂模式。这些模式可以达到其目的,并且可以非常有用,但是有一些用例我们必须创建一个非常复杂的对象,并且创建它需要不同的步骤,每个步骤都需要不同的操作。在这种情况下,构建器模...
Spring WebFlux,spring框架5.0将会新增的web增强框架,这里主要讲述什么是Spring WebFlux以及Spring WebFlux的新功能,Spring WebFlux...