【Project】云商城 - 数据库设计
数据库设计
云商城完整项目介绍见文章 【Project】云商城
本项目共有 6 个数据库:
yunmall_admin
:后台管理系统数据库yunmall_oms
:订单数据库yunmall_pms
:商品数据库yunmall_sms
:积分数据库yunmall_ums
:会员数据库yunmall_wms
:库存数据库
下面逐个介绍每个数据库的设计结构。
商品数据库
商品数据库中共有 15 张表:
这些表按照类型可大致分类以下几类:
- 商品分类信息表
- 商品品牌信息表
- 商品属性信息表
- 商品属性分组信息
- 商品基本属性信息
- 商品销售属性信息
- SKU 信息表
- SPU 信息表
为了保证查询效率,本项目不使用联表查询,不添加外键,而是选择冗余存储信息。即使这会违背数据库三范式,但在大型项目中联表查询会耗费极大的时间。
下面按照分类逐一介绍每个表的结构细节。
商品分类信息表
商品分类信息表 pms_category
负责保存商品的分类信息,将在三级分类功能中进行展示。效果如下:
pms_category
表结构:
其中,cat_id
为当前分类的 id(主键),parent_id
为当前分类的父级分类的 id,可以为其增加索引以提高查询效率。
在后台管理系统中的展示效果:
商品品牌信息表
商品品牌信息表 pms_brand
负责保存所有的商品品牌信息,表结构:
其中,brand_id
为品牌 id(主键),logo
为该品牌的图片 URL(图片数据保存在阿里云的 OSS 中)
在后台管理系统中的展示效果:
商品分类与品牌关联表
pms_category_brand_relation
每一种商品分类都对应了一些品牌,例如手机分类下有“华为、苹果、小米”等品牌。因此还需要一个关联表将商品分类与品牌进行关联。查询时只需要去关联表里即可得到对应的品牌 id,然后再去品牌表里查询更详细的信息,而不能使用外键的方式查询,否则查询效率极低。表结构:
画一个示意图:
商品属性信息表
商品属性信息的存储较为复杂,共有五张表:
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
表结构:
pms_product_attr_value
表结构:
pms_sku_sale_attr_value
表结构:
对比三者内容可以看出一个是保存的属性配置(类似于定义类中的属性),另一个则是保存的具体的基本属性值与 spu_id
(类似于实例对象),最后一个则是保存的销售属性值与 sku_id
。
具体使用时:首先需要先在后台管理系统中新增商品属性配置,然后才能在发布商品时为每个 SPU 分配具体的属性值:
新增基本属性
新增销售属性
另外,观察商品属性表 pms_attr
中的 attr_type
字段,该字段代表当前属性是基本属性(规格参数)还是销售属性:
- 基本属性:又称规格参数。同一个 SPU 下的所有 SKU 都共享同一份基本属性。体现在
attr_type = 1
- 销售属性:不同的 SKU 拥有不同的销售属性。体现在
attr_type = 0
在商城首页的具体展示效果如下:
销售属性
基本属性(规格参数)
这两种属性都存储在 pms_attr
表中。在新增属性配置时只需要在属性类型一栏选择时规格参数胡还是销售属性即可:
商品属性分组表
每一种基本属性都会从属于一个属性分组,例如:基本信息分组下有机身宽度、机身重量、机身长度等基本属性。属性分组表 pms_attr_group
的结构:
可以看到,每一个属性分组都关联着一个商品分类 catelog_id
,代表属性分组是同一个商品分类下共享同一份的。例如手机分类下的属性分组固定为:主题、基本信息、主芯片等,只要是手机分类下的 SPU,都固定拥有这些属性分组,只是不同的 SPU 拥有不同的具体属性。
属性分组在后台管理系统中的展示效果:
基本属性信息与属性分组信息的对应关系信息存储在关联表 pms_attr_attrgroup_relation
中:
注意:只有基本属性才和属性分组关联,销售属性不和属性分组关联,因为销售属性是因 SKU 而已的,不属于 SPU 的共享信息。
在新增属性配置时,需要指定该属性所属分组:
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 信息。表结构:
后台管理系统的效果展示:
SPU 的其他信息存储在:
pms_spu_comment
pms_spu_images
pms_spu_info_desc
SKU 信息表
SKU 信息存储在 pms_sku_info
表中,并且每个 SKU 都关联着其所属的 SPU,这样即可根据 SPU 查询出其所属的所有 SKU。表结构:
SKU 与销售属性值进行绑定,存储在 pms_sku_sale_attr_value
表中(见商品属性表)。SKU 的其他信息存储在pms_sku_images
中。
总结
商品三级分类表与品牌表的关系:
商品属性表间关系:
后台添加商品流程
总体流程:
- 添加品牌信息,并绑定对应的分类
- 新增基本属性与销售属性
新增基本属性
新增销售属性
- 新增属性分组,并关联每个分组内都有哪些属性
- 发布商品,需要依次指定商品的分类、品牌、基本树形(规格参数)、销售属性、SKU 信息:
- 发布完成后,即可进行 SPU 管理与商品(SKU)管理
SPU 管理:上架商品
商品(SKU)管理:上传图片、参与秒杀、满减设置、折扣设置、库存管理等