电商平台中的SKU与SPU表设计:如何优雅地管理五花八门的商品?

9 阅读4分钟

深入理解SPU与SKU:电商系统中的商品管理核心

在电商系统中,商品管理是一个核心模块,而SPU(Standard Product Unit)和SKU(Stock Keeping Unit)是商品管理中的两个重要概念。本文将通过一个实际的数据库设计案例,详细解析SPU和SKU的设计与实现,帮助你更好地理解它们在电商系统中的作用。


1. 什么是SPU和SKU?

SPU(Standard Product Unit)

SPU是标准化产品单元,代表一类商品的集合。它描述了商品的基本信息,例如商品名称、品牌、分类、卖点、主图、价格等。SPU是一个抽象的概念,通常不涉及具体的库存管理。

示例

  • iPhone 13 是一个SPU,它包含了多个颜色和存储容量的变体。

SKU(Stock Keeping Unit)

SKU是库存量单位,代表具体的商品实例。它描述了商品的具体属性,例如颜色、尺寸、价格、库存等。SKU是具体的、可售卖的单元,直接关联库存管理。

示例

  • iPhone 13 红色 128GB 是一个SKU。

2. 数据库设计

以下是一个电商系统中SPU和SKU的数据库设计,基于你提供的表结构。

2.1 SPU相关表

spu

存储商品的基本信息。

字段名类型描述
spu_idbigintSPU ID,主键
brand_idbigint品牌ID
category_idbigint分类ID
shop_category_idbigint店铺分类ID
shop_idbigint店铺ID
namevarchar(255)商品名称
selling_pointvarchar(255)商品卖点
main_img_urlvarchar(255)商品主图URL
img_urlsvarchar(1000)商品图片URL(多个)
videovarchar(150)商品视频URL
price_feebigint售价(整数形式)
market_price_feebigint市场价(整数形式)
statustinyint状态(-1:删除, 0:下架, 1:上架)
has_sku_imgtinyintSKU是否有图片(0:无, 1:有)
seqsmallint排序序号
spu_attr_value

存储商品的规格属性值。

字段名类型描述
spu_attr_value_idbigint属性值ID,主键
spu_idbigintSPU ID
attr_idbigint规格属性ID
attr_namevarchar(255)规格属性名称
attr_value_idbigint规格属性值ID
attr_value_namevarchar(255)规格属性值名称
attr_descvarchar(255)规格属性描述
spu_detail

存储商品的详细信息。

字段名类型描述
spu_idbigintSPU ID,主键
detailmediumtext商品详情(HTML格式)

2.2 SKU相关表

sku

存储具体的商品实例信息。

字段名类型描述
sku_idbigintSKU ID,主键
spu_idbigintSPU ID
sku_namevarchar(255)SKU名称
attrsvarchar(255)销售属性值ID(逗号分隔)
img_urlvarchar(1000)SKU图片URL
price_feebigint售价(整数形式)
market_price_feebigint市场价(整数形式)
party_codevarchar(100)商品编码
model_idvarchar(100)商品条形码
weightdecimal(15,3)商品重量
volumedecimal(15,3)商品体积
statustinyint状态(1:启用, 0:禁用, -1:删除)
sku_stock

存储SKU的库存信息。

字段名类型描述
stock_idbigint库存ID,主键
sku_idbigintSKU ID
actual_stockint实际库存
lock_stockint锁定库存
stockint可售卖库存
sku_stock_lock

存储库存锁定信息,用于订单处理。

字段名类型描述
idbigint锁定ID,主键
spu_idbigintSPU ID
sku_idbigintSKU ID
order_idbigint订单ID
statustinyint状态(-1:已解锁, 0:待确定, 1:已锁定)
countint锁定库存数量

3. 插入商品的完整流程

3.1 插入SPU信息

INSERT INTO spu (brand_id, category_id, shop_category_id, shop_id, name, selling_point, main_img_url, img_urls, video, price_fee, market_price_fee, status, has_sku_img, seq)
VALUES (1, 101, 201, 301, 'iPhone 13', '最新款iPhone', 'http://example.com/main.jpg', 'http://example.com/img1.jpg,http://example.com/img2.jpg', 'http://example.com/video.mp4', 699900, 799900, 1, 1, 1);

假设生成的spu_id1001

3.2 插入SPU属性值

INSERT INTO spu_attr_value (spu_id, attr_id, attr_name, attr_value_id, attr_value_name, attr_desc)
VALUES 
(1001, 1, '颜色', 101, '红色', '红色款'),
(1001, 2, '存储容量', 102, '128GB', '128GB存储');

3.3 插入SKU信息

INSERT INTO sku (spu_id, sku_name, attrs, img_url, price_fee, market_price_fee, party_code, model_id, weight, volume, status)
VALUES 
(1001, 'iPhone 13 红色 128GB', '101,102', 'http://example.com/red_128gb.jpg', 699900, 799900, 'IP13-RED-128', '1234567890123', 0.174, 0.007, 1);

假设生成的sku_id2001

3.4 插入SKU库存信息

INSERT INTO sku_stock (sku_id, actual_stock, lock_stock, stock)
VALUES (2001, 100, 0, 100);

3.5 插入商品详情

INSERT INTO spu_detail (spu_id, detail)
VALUES (1001, '<html>...商品详情HTML内容...</html>');

4. 总结

通过以上设计,我们可以清晰地管理商品的SPU和SKU信息:

  • SPU:描述商品的基本信息和规格属性。
  • SKU:描述具体的商品实例及其库存信息。

这种设计不仅支持复杂的商品管理需求,还能有效提升系统的扩展性和灵活性。希望本文能帮助你更好地理解SPU和SKU在电商系统中的应用!