数据库与数据表设计之商品管理相关数据表设计
in JavaDevelop with 0 comment

数据库与数据表设计之商品管理相关数据表设计

in JavaDevelop with 0 comment

数据表概览

相关数据表有:

设计思路

关于SPU和SKU

商品相关数据表是电商平台中最复杂的环节之一(除了商品以外,促销相关的也是极为复杂的,在本项目中并不体现),首先,最核心的2个概念是SPU(Standard Product Unit)和SKU(Stock Keeping Unit),其中,SPU有点像一种分类,但又具有一定的商品特征,它的具体表现就像“华为手机Mate 40”,它具有颜色、尺寸、重量、内存容量等属性,却没有值,所以,它像一个商品又不是商品,由于各属性都没有值,你甚至无法确定它的价格,而SKU就是具体的每一件实际的商品,例如你可以购买并握在手上的一部“价值5500元的华为手机Mate 40 黑色 256GB”。

SPU与SKU的属性

显然,SPU、SKU都涉及一个非常重要的概念:属性。
在具体的业务中,管理员需要先准备一些通用的“属性”,比如颜色、重量等,并确定其值的来源,例如是由管理员提前穷举且在发布商品时选择其中一个,还是在发布商品时直接输入,这些由pms_attribute表进行存储。

属性模板

在pms_attribute中存储的属性是整个电商平台的所有商品的属性,数量庞大,管理员在发布某个商品时,从庞大的属性库里挑选当前商品的属性是非常麻烦的,所以,就有了pms_attribute_template和
pms_attribute_template_value表,前者用于记录有哪些“属性模版”,类似于管理员权限相关表中的ams_role表,它只表示“属性模版”的简单信息,而pms_attribute_template_value表则是模版与多个属性的对应关系。

记录属性的值

需要注意,在本项目的设计中,SPU与属性(或属性模版)并没有任何关系,当已经创建了SPU和属性模版后,就可以创建SKU了(真正的发布商品),由于在SPU中已经记录了商品的许多信息,所以,在SKU中主要记录各属性与值,由于不同SKU的属性数量并不统一,所以使用JSON格式的字符串(表现为pms_sku的specifications字段)进行记录,当然,在
pms_sku中还有一些与SKU直接相关的数据,例如商品的价格、库存等。

当已经确定了使用JSON来记录许多信息后,价格、库存是不是也可以一并记录在JSON中呢?
理论上来说,是可以的,但并不应该这么做,价格、库存这些数据是所有商品都具备的,无论它是一件衣服,还是一面镜子,或是一台笔记本电脑,而JSON中的属性并不适用于每一件商品!同时,JSON中的属性的值是相对固定的,例如某个SKU是“价值5500元的华为手机Mate 40 黑色256GB”,那么,在JSON中会记录(以下只是简单示例):

{
"价值": 5500,
"颜色": "黑色",
"内存容量": 256
}

对于以上SKU而言,在JSON中记录的这些值是不会改变的!而价格、库存都是可能变化的数据,从开发的角度来看,更新数据表中某个字段的值比更新JSON中某个属性的值更加合理,技术上更加稳定。

常见问题

表设计