我是一段不羁的公告!
记得给艿艿这 3 个项目加油,添加一个 STAR 噢。
https://github.com/YunaiV/SpringBoot-Labs
https://github.com/YunaiV/onemall
https://github.com/YunaiV/ruoyi-vue-pro

数据库实体设计 —— 商品(1.3)之商品分组

艿艿目前正在做一个开源的电商项目,胖友可以 star 下。https://gitee.com/zhijiantianya/onemall

1. 概述

本文主要分享商品模块的商品分组的数据库实体设计

基于 有赞云提供的商品API有赞微商城的商品分组 逆向猜测数据库实体。

【护脸旁白】
笔者非电商行业出身 && 非有赞工程师,所以有错误或不合理的地方,烦请斧正和探讨。
有赞是个各方面都很 NICE 的公司,推荐

2. 背景了解

参考 《新建商品分组(即商品分类/商品标签)》

店铺商品分类有两种分组类型:

  • 系统内置
    • 最热商品:店内所有商品(不包括列表中隐藏的商品),系统根据商品被浏览、购买情况对商品排序。
    • 最新商品:店内所有商品(不包括列表中隐藏的商品),新发布的商品排在前面。
    • 列表中隐藏:此类商品将在商品列表中隐藏
    • 其他:店内所有无商品分组的商品。
  • 商家自定义

当商家添加商品时,只可以选择【列表中隐藏】和【商家自定义】的商品分组

即,不可以选择【最热商品】/【最新商品】/【其他】

选择 最热商品 / 最新商品 其他 列表中隐藏 商家自定义
不选择
【列表中隐藏】
【商家自定义】
【列表中隐藏】 && 【商家自定义】

当店铺创建时,系统自动插入内置的商品分类。注意,商品编号都是不同的

2.1 界面

  1. 商城端-商品列表(最新商品)
  2. 商城端-商品分组编辑页
  3. 商城端-商品详情编辑页

  • 微店
  • 淘宝

3. 数据库实体

整体实体类关系如下图:

全部实体在 Github 商品实体目录 下可见。

3.1 ItemTag

ItemTag ,商品分组。

/**
* 编号,自增
*/
private Integer id;
/**
* 别名
*
* 系统生成,作为唯一标识。例如,2fpa62tbmsl9h
*/
private String alias;
/**
* 店铺编号
*/
private Integer shopId;
/**
* 名称
*/
private String title;
/**
* 状态
* 1-正常
* 2-删除
*/
private Integer status;
/**
* 默认类型
*
* 0-商家自定义
* 1-其他
* 2-最新商品 https://help.youzan.com/qa#/menu/2149/detail/1185?_k=825jlx
* 3-最热商品 https://help.youzan.com/qa#/menu/2149/detail/1185?_k=825jlx
* 4-列表中隐藏
*/
private Integer isDefault;
/**
* 商品数量
*/
private Integer itemCount;
/**
* 模板元素数组
*
* JSON 格式,数组,每个元素为 {@link cn.iocoder.doraemon.itemgroup.item.entity.vo.AbstractItemTemplateElementVO} 的实现类字符串
*/
private String data;
/**
* 创建时间
*/
private Date createTime;
/**
* 更新时间
*/
private Date updateTime;
/**
* 删除时间
*/
private Date deleteTime;
  • id ,商品分组编号,自增
  • shopId ,店铺编号。
  • status ,状态。删除时,标记 status = 2
  • isDefault ,默认类型。
  • itemCount ,商品数量统计。
  • datadata ,模板元素数组,JSON 格式化成字符串( 实际无根据元素进行检索,所以可以这么做 )。其中,每个元素为 AbstractItemTemplateElementVO子类

3.1.1 ConfigElementVO

ConfigElementVO ,配置元素 VO 。

private static final String TYPE = "config";

/**
* 分组标题
*/
private String title;
/**
* 是否页面上显示商品分组名称
*
* 0-不显示
* 1-显示
*/
private Integer showTagTitle;
/**
* 第一优先级
*
* 0-序号越大越靠前
* 3-最热的排在前面
*/
private Integer firstPriority;
/**
* 第二优先级
*
* 1-创建时间越晚越靠前
* 2-创建时间越早越靠前
* 3-最热的排在前面
*/
private Integer secondPriority;
/**
* 富文本编辑器
*/
private String content;
/**
* 列表样式
*
* 0-大图
* 1-小图
* 2-一大两小
* 3-详细列表
*/
private Integer size;
/**
* 商品样式
*
* 0-卡片样式
* 1-瀑布流
* 2-极简样式
* 3-促销
*/
private Integer sizeType;
/**
* 是否显示购买按钮
*
* 0-不显示
* 1-显示
*/
private Integer buyBtn;
/**
* 显示购买按钮的样式
*
* 1-样式1
* 2-样式2
* 3-样式3
* 4-样式4
*/
private Integer buyBtnType;
/**
* 显示购物车图标
*
* 0-不显示
* 1-显示
*/
private Integer cart;
/**
* 是否显示商品标题
*
* 0-不显示
* 1-显示
*/
private Integer showTitle;
/**
* 是否显示商品简介
*
* 0-不显示
* 1-显示
*/
private Integer showSubTitle;
/**
* 是否显示商品价格
*
* 0-不显示
* 1-显示
*/
private Integer price;
  • type = config
  • firstPriority / secondPriority ,第一、二优先级。系统内置的商品分组不可编辑该字段。
  • content ,富文本编辑器。
  • 其他字段类似 ItemTemplateGoodsListElementVO 类。

3.1.2 其他 ElementVO

参见 《数据库实体设计 —— 商品(1.2)之商品》「3.3 AbstractItemTemplateElementVO」 ,有详细分享。

3.2 ItemTagReference

ItemTagReference ,商品分组引用。一个商品可以有多个商品分组。

/**
* 店铺编号
*/
private Integer shopId;
/**
* 商品编号
*/
private Integer itemId;
/**
* 商品分组编号
*/
private Integer tagId;
/**
* 状态
*
* 1-正常
* 2-删除
*/
private Integer status;
/**
* 添加时间
*/
private Date addTime;
  • status ,状态。当商品取消设置某个商品分组时,标记 status = 2

4. API

基于如下整理 API 类。

4.1 ItemTagAPI

ItemTagAPI ,商品分组 API 。

666. 彩蛋

简单水更一篇文章。

总访客数 && 总访问量