SPU和SKU
一般概念
由于新零售涵盖面广,涉及到的业务众多,每一种商品和服务都可能会不一样,所以就无法用一种通用的属性字段来描述和定义它。
例如,对于不同品牌、型号和款式的手机,它需要有多个不同类型的值。
品牌属性:iPhone、Huawei、Xiaomi、Oppo、Vivo、Samsung......
型号属性:
iPhone:
iPhone 12、iPhone 12 Pro、iPhone 12 Pro Max、iPhone 13、......
Huawei:
Pura 70、Pura 70 Pro、Nova 13、Meta40、Meta60、......
......
款式属性:
iPhone 12 128G 玫瑰金 国行、iPhone 12 256G 玫瑰金 国行、iPhone 12 512G 象牙白 国行、......
以上还只是手机,对于服装、电器、母婴、日用、运动等其他几万种
商品,又会有完全不同的品牌、型号、款式、规格、参数等。
架构师或DBA不可能提前预知所有这些商品的种类、品牌、型号、款式、规格、参数等属性,所以就需要一种可以动态定义
属性字段的方法来描述它们。
是英文
Standard Product Unit(标准化产品单元)
首字母的缩写,是抽象逻辑上某一组特性的集合。例如,
iPhone 12
、iPhone 13
和iPhone 14
就是三个不同的SPU。
不同模式的新零售,对SKU造成的影响是不同的(主要是检索时对权重
的影响)。
不同商品的SKU差异巨大。

可看到,计算机的SKU和女装的SKU完全是两个东西,却要把它们保存在同一个数据库中。这其中最大的挑战就在于:这种关系数据库该如何设计?
设计方案
一种方案是把所有可能的SKU字段都放在一张表里。
主键 | 商品名称 | CPU | 硬盘类型 | ... | 风格 | 袖长 | 尺码 | ... | 保质期 |
---|---|---|---|---|---|---|---|---|---|
1 | i7i9级十八核台式电脑主机 | Intel/英特尔酷睿i9 | 固态硬盘(SSD) | ... | 无 | 无 | 无 | ... | 无 |
2 | 骆驼热浪冲锋衣女装 | 无 | 无 | ... | 夏日 | 短袖 | S M L XL | ... | 无 |
3 | 法式面包 | 无 | 无 | ... | 无 | 无 | 无 | ... | 6个月 |
4 | ... | ... | ... | ... | ... | ... | ... | ... | ... |
这种方式比较适合于街边小店,但对于体量巨大新零售电子商务来说,其缺点是无法克服的。
对于有几万种商品,几百万甚至上千万个字段的新零售数据库,这种方式显然超出了人力可控的范围。
修改、删除某个商品时会对所有商品造成影响,而且空间利用率非常低(对于某个商品,几乎
99%
的字段都是无用的)。一旦某个商品需要添加、删除个别字段时,整张表将不可用,这会直接导致电商平台陷入瘫痪。
此时就需要另辟蹊径了,设计出适合于新零售业务发展的关系数据库表结构
。

上图中的表结构设计可以这样来理解。
品类表
和参数表
整体上是1对多
的关系。允许
品类
可以没有参数
,也可以有多个参数,所以参数表
一方写上了0..n
。参数
至少要对应一个品类
,也可以对应多个品类
,例如,服装
分为男装
、女装
和童装
,它们都可以有尺码
、面料
等参数,这是大类
细分为小类
的情况(如果不细分的话,基本上就是1对1
的关系)。
品类表
和产品表
整体上是1对1
的关系。某个
品类
下面可以没有产品
,所以产品表
一方写上了0..1
。产品
在理论上可以对应多个品类
,但这样在开发时会搞得比较复杂,所以为了取得理论和实践的平衡,这里确定为1对1
的关系。
产品表
和商品表
整体上是1对多
的关系。一个
产品
至少要有一个对应的商品
,不然该产品
就不存在,所以商品表
一方写上了1..n
。因为
商品
属于且仅属于某一个产品
,所以产品表
一方写的是1
。
感谢支持
更多内容,请移步《超级个体》。