【Project】云商城 - 数据库设计

数据库设计

云商城完整项目介绍见文章 【Project】云商城

本项目共有 6 个数据库:

  • yunmall_admin:后台管理系统数据库
  • yunmall_oms:订单数据库
  • yunmall_pms:商品数据库
  • yunmall_sms:积分数据库
  • yunmall_ums:会员数据库
  • yunmall_wms:库存数据库

下面逐个介绍每个数据库的设计结构。

商品数据库

商品数据库中共有 15 张表:

image-20220111140827318

这些表按照类型可大致分类以下几类:

  • 商品分类信息表
  • 商品品牌信息表
  • 商品属性信息表
    • 商品属性分组信息
    • 商品基本属性信息
    • 商品销售属性信息
  • SKU 信息表
  • SPU 信息表
image-20220111150611427

为了保证查询效率,本项目不使用联表查询,不添加外键,而是选择冗余存储信息。即使这会违背数据库三范式但在大型项目中联表查询会耗费极大的时间

下面按照分类逐一介绍每个表的结构细节。

商品分类信息表

商品分类信息表 pms_category 负责保存商品的分类信息,将在三级分类功能中进行展示。效果如下:

image-20220110153628156

pms_category 表结构:

image-20220111141251559

其中,cat_id 为当前分类的 id(主键),parent_id 为当前分类的父级分类的 id,可以为其增加索引以提高查询效率。

在后台管理系统中的展示效果:

image-20220111145930311

商品品牌信息表

商品品牌信息表 pms_brand 负责保存所有的商品品牌信息,表结构:

image-20220111143048778

其中,brand_id 为品牌 id(主键),logo 为该品牌的图片 URL(图片数据保存在阿里云的 OSS 中)

在后台管理系统中的展示效果:

image-20220111145850683

商品分类与品牌关联表 pms_category_brand_relation

每一种商品分类都对应了一些品牌,例如手机分类下有“华为、苹果、小米”等品牌。因此还需要一个关联表将商品分类与品牌进行关联。查询时只需要去关联表里即可得到对应的品牌 id,然后再去品牌表里查询更详细的信息,而不能使用外键的方式查询,否则查询效率极低。表结构:

image-20220111143709651

画一个示意图:

商品属性信息表

商品属性信息的存储较为复杂,共有五张表:

  • pms_attr:商品属性配置
    • pms_product_attr_value:商品基本属性值表(以 SPU 为单位)
    • pms_sku_sale_attr_value:商品销售属性值表(以 SKU 为单位)
  • pms_attr_group:商品属性分组
  • pms_attr_attrgroup_relation:商品属性与属性分组关联

其中,每一个属性分组下包含着多个属性,对应关系保存在关联表中,并且:

  • pms_attr 仅保存每个属性的配置信息,不保存每类商品的具体值;类似于,包括基本属性和销售属性,只定义字段类型,不保存具体值
    • pms_product_attr_value 保存每个 SPU基本属性具体值,是包含 spu_id 的;类似于实例对象,每个 SPU 拥有自己独特的基本属性值;同一个 SPU 下的 SKU 共享同一份基本属性
    • pms_sku_sale_attr_value 保存每个 SKU销售属性具体值,是包含 sku_id 的;类似于实例对象,每个 SKU 拥有自己独有的销售属性值
  • pms_attr_group 保存属性分组的信息,是包含 catelog_id 的;每一种商品分类共享同一份属性分组

商品属性表

pms_attr 表结构:

image-20220111151228915

pms_product_attr_value 表结构:

image-20220111151801695

pms_sku_sale_attr_value 表结构:

image-20220111170403502

对比三者内容可以看出一个是保存的属性配置(类似于定义类中的属性),另一个则是保存的具体的基本属性值与 spu_id(类似于实例对象),最后一个则是保存的销售属性值sku_id

具体使用时:首先需要先在后台管理系统中新增商品属性配置,然后才能在发布商品时为每个 SPU 分配具体的属性值

新增基本属性

image-20220111152257418

新增销售属性

image-20220111170000107

另外,观察商品属性表 pms_attr 中的 attr_type 字段,该字段代表当前属性是基本属性(规格参数)还是销售属性

  • 基本属性:又称规格参数。同一个 SPU 下的所有 SKU 都共享同一份基本属性。体现在 attr_type = 1
  • 销售属性:不同的 SKU 拥有不同的销售属性。体现在 attr_type = 0

在商城首页的具体展示效果如下:

销售属性

image-20220111102824754

基本属性(规格参数)

image-20220111103622978

这两种属性都存储在 pms_attr 表中。在新增属性配置时只需要在属性类型一栏选择时规格参数胡还是销售属性即可:

image-20220111152503752

商品属性分组表

每一种基本属性都会从属于一个属性分组,例如:基本信息分组下有机身宽度、机身重量、机身长度等基本属性。属性分组表 pms_attr_group 的结构:

image-20220111153803017

可以看到,每一个属性分组都关联着一个商品分类 catelog_id,代表属性分组是同一个商品分类下共享同一份的。例如手机分类下的属性分组固定为:主题、基本信息、主芯片等,只要是手机分类下的 SPU,都固定拥有这些属性分组,只是不同的 SPU 拥有不同的具体属性。

属性分组在后台管理系统中的展示效果:

image-20220111165422294

基本属性信息与属性分组信息的对应关系信息存储在关联表 pms_attr_attrgroup_relation 中:

image-20220111154734210

注意:只有基本属性才和属性分组关联,销售属性不和属性分组关联,因为销售属性是因 SKU 而已的,不属于 SPU 的共享信息。

在新增属性配置时,需要指定该属性所属分组:

image-20220111152503752

SPU 信息表

  • SPU:Standard Product Unit (标准化产品单元)。是商品信息聚合的最小单位,是一组可复用,易检索的标准化信息的组合,该集合描述了一个产品的特性。SPU 不是销售的基本单位,其内的 SKU 才是销售的基本单位。每一个 SPU 都从属于某一种商品分类
  • SKU:Stock Keeping Unit (库存量单位)。是用户购买到的真正的商品单位,也是真正在库存中存储的单位。同一个 SPU 下的 SKU 拥有相同的基本属性,不同的 SKU 间则拥有不同的销售属性

例如 IPhoneX 是 SPU,MI8 是 SPU,而 “IPhoneX 64G 黑曜石” 和 “MIX8 + 64G” 是 SKU

SPU 信息存储在 pms_spu_info 表中,并且每个 SPU 都关联着一个分类 id,这样冗余存储更加方便根据分类 id 查询 SPU 信息。表结构:

image-20220111145731856

后台管理系统的效果展示:

image-20220111164737204

SPU 的其他信息存储在:

  • pms_spu_comment
  • pms_spu_images
  • pms_spu_info_desc

SKU 信息表

SKU 信息存储在 pms_sku_info 表中,并且每个 SKU 都关联着其所属的 SPU,这样即可根据 SPU 查询出其所属的所有 SKU。表结构:

image-20220111170643703

SKU 与销售属性值进行绑定,存储在 pms_sku_sale_attr_value 表中(见商品属性表)。SKU 的其他信息存储在pms_sku_images 中。

总结

商品三级分类表与品牌表的关系:

image-20220111183150949

商品属性表间关系:

image-20220111191132519

后台添加商品流程

总体流程:

image-20220111171358460
  1. 添加品牌信息,并绑定对应的分类

image-20220111145850683

  1. 新增基本属性与销售属性

新增基本属性

image-20220111152257418

新增销售属性

image-20220111170000107

  1. 新增属性分组,并关联每个分组内都有哪些属性

image-20220111171546089

  1. 发布商品,需要依次指定商品的分类、品牌、基本树形(规格参数)、销售属性、SKU 信息:

image-20220111170947056

  1. 发布完成后,即可进行 SPU 管理商品(SKU)管理

SPU 管理:上架商品

image-20220111171654041

商品(SKU)管理:上传图片、参与秒杀、满减设置、折扣设置、库存管理等

image-20220111171710435