深入理解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_id | bigint | SPU ID,主键 |
brand_id | bigint | 品牌ID |
category_id | bigint | 分类ID |
shop_category_id | bigint | 店铺分类ID |
shop_id | bigint | 店铺ID |
name | varchar(255) | 商品名称 |
selling_point | varchar(255) | 商品卖点 |
main_img_url | varchar(255) | 商品主图URL |
img_urls | varchar(1000) | 商品图片URL(多个) |
video | varchar(150) | 商品视频URL |
price_fee | bigint | 售价(整数形式) |
market_price_fee | bigint | 市场价(整数形式) |
status | tinyint | 状态(-1:删除, 0:下架, 1:上架) |
has_sku_img | tinyint | SKU是否有图片(0:无, 1:有) |
seq | smallint | 排序序号 |
spu_attr_value
表
存储商品的规格属性值。
字段名 | 类型 | 描述 |
---|---|---|
spu_attr_value_id | bigint | 属性值ID,主键 |
spu_id | bigint | SPU ID |
attr_id | bigint | 规格属性ID |
attr_name | varchar(255) | 规格属性名称 |
attr_value_id | bigint | 规格属性值ID |
attr_value_name | varchar(255) | 规格属性值名称 |
attr_desc | varchar(255) | 规格属性描述 |
spu_detail
表
存储商品的详细信息。
字段名 | 类型 | 描述 |
---|---|---|
spu_id | bigint | SPU ID,主键 |
detail | mediumtext | 商品详情(HTML格式) |
2.2 SKU相关表
sku
表
存储具体的商品实例信息。
字段名 | 类型 | 描述 |
---|---|---|
sku_id | bigint | SKU ID,主键 |
spu_id | bigint | SPU ID |
sku_name | varchar(255) | SKU名称 |
attrs | varchar(255) | 销售属性值ID(逗号分隔) |
img_url | varchar(1000) | SKU图片URL |
price_fee | bigint | 售价(整数形式) |
market_price_fee | bigint | 市场价(整数形式) |
party_code | varchar(100) | 商品编码 |
model_id | varchar(100) | 商品条形码 |
weight | decimal(15,3) | 商品重量 |
volume | decimal(15,3) | 商品体积 |
status | tinyint | 状态(1:启用, 0:禁用, -1:删除) |
sku_stock
表
存储SKU的库存信息。
字段名 | 类型 | 描述 |
---|---|---|
stock_id | bigint | 库存ID,主键 |
sku_id | bigint | SKU ID |
actual_stock | int | 实际库存 |
lock_stock | int | 锁定库存 |
stock | int | 可售卖库存 |
sku_stock_lock
表
存储库存锁定信息,用于订单处理。
字段名 | 类型 | 描述 |
---|---|---|
id | bigint | 锁定ID,主键 |
spu_id | bigint | SPU ID |
sku_id | bigint | SKU ID |
order_id | bigint | 订单ID |
status | tinyint | 状态(-1:已解锁, 0:待确定, 1:已锁定) |
count | int | 锁定库存数量 |
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_id
为1001
。
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_id
为2001
。
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在电商系统中的应用!