1. 前言
商品模块是电商系统的核心。本章节简单介绍商品模块的基础部分,也就是L05教程中的第五章课程传送门。
本模块功能包括:
- 商品
- 收藏商品
2. 功能分析
2.1 商品
2.1.1 需求分析
本课程电商系统是B2C模式的,商品管理需运营人员登录后台管理系统进行新增、编辑、上下架等操作。首先,我们先看一下商品详情、商品列表、创建商品几个操作页面效果图。通过观察我们发现,同一商品的不同属性之间库存不同、价格也不同。这里就需要引入SKU的概念。
SKU = Stock Keeping Unit(库存量单位),也可以称为『单品』。对一种商品而言,当其品牌、型号、配置、等级、花色、包装容量、单位、生产日期、保质期、用途、价格、产地等属性中任一属性与其他商品存在不同时,可称为一个单品。
2.1.2 表设计
一个商品可以有多个商品SKU,因此我们设计1:m的商品表和商品SKU表来保存商品信息。其中,商品表用于保存商品的通用属性,比如商品名,总销量,总评价,控制商品是否上架等;商品SKU表保存SKU的库存,价格等SKU特有属性。
# 商品表
CREATE TABLE `products` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT, # 自增ID
`title` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL, # 商品名称
`description` text COLLATE utf8mb4_unicode_ci NOT NULL, # 商品描述
`image` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL, #商品封面图片文件路径
`on_sale` tinyint(1) NOT NULL DEFAULT '1', # 商品是否上架
`rating` double(8,2) NOT NULL DEFAULT '5.00', # 商品平均评分
`sold_count` int(10) unsigned NOT NULL DEFAULT '0', # 商品总销量
`review_count` int(10) unsigned NOT NULL DEFAULT '0', # 商品总评价数量
`price` decimal(10,2) NOT NULL, # 商品SKU的最低价格
`created_at` timestamp NULL DEFAULT NULL,
`updated_at` timestamp NULL DEFAULT NULL,
PRIMARY KEY (`id`),
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
# 商品SKU表
CREATE TABLE `product_skus` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT, # 自增ID
`title` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL, # SKU名称
`description` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL, # SKU描述
`price` decimal(10,2) NOT NULL, # SKU价格
`stock` int(10) unsigned NOT NULL, # 库存
`product_id` int(10) unsigned NOT NULL, # 所属商品ID
`created_at` timestamp NULL DEFAULT NULL,
`updated_at` timestamp NULL DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `product_skus_product_id_foreign` (`product_id`),
CONSTRAINT `product_skus_product_id_foreign` FOREIGN KEY (`product_id`) REFERENCES `products` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
2.2 收藏商品
2.2.1 需求分析
- 用户可以收藏/取消收藏商品
- 收藏的商品可以在收藏列表查看;
2.2.2 表设计
- 实现逻辑
商品收藏是用户行为,收藏的是商品。一个用户可以收藏多个商品,一个商品可以被多个用户收藏,是典型的m:n的模型关系,只需要新增一个中间表关联用户ID与商品ID,每当用户收藏/取消收藏商品时,添加/删除一条中间表记录即可。 - 表结构
CREATE TABLE `user_favorite_products` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT, # 自增ID
`user_id` int(10) unsigned NOT NULL, # 用户ID
`product_id` int(10) unsigned NOT NULL, # 商品ID
`created_at` timestamp NULL DEFAULT NULL, # 创建时间
`updated_at` timestamp NULL DEFAULT NULL, # 更新时间
PRIMARY KEY (`id`),
KEY `user_favorite_products_user_id_foreign` (`user_id`),
KEY `user_favorite_products_product_id_foreign` (`product_id`),
CONSTRAINT `user_favorite_products_product_id_foreign` FOREIGN KEY (`product_id`) REFERENCES `products` (`id`) ON DELETE CASCADE,
CONSTRAINT `user_favorite_products_user_id_foreign` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
上一节:01 用户模块
下一节:03 商品模块-进阶 商品类目