1. 前言
商品模塊是電商系統(tǒng)的核心茵臭。本章節(jié)簡(jiǎn)單介紹商品模塊的基礎(chǔ)部分,也就是L05教程中的第五章課程傳送門蠢古。
本模塊功能包括:
- 商品
- 收藏商品
2. 功能分析
2.1 商品
2.1.1 需求分析
本課程電商系統(tǒng)是B2C模式的京痢,商品管理需運(yùn)營(yíng)人員登錄后臺(tái)管理系統(tǒng)進(jìn)行新增荠呐、編輯竖独、上下架等操作裤唠。首先,我們先看一下商品詳情莹痢、商品列表种蘸、創(chuàng)建商品幾個(gè)操作頁(yè)面效果圖。通過觀察我們發(fā)現(xiàn)竞膳,同一商品的不同屬性之間庫(kù)存不同航瞭、價(jià)格也不同。這里就需要引入SKU的概念坦辟。
SKU = Stock Keeping Unit(庫(kù)存量單位)刊侯,也可以稱為『?jiǎn)纹贰弧?duì)一種商品而言锉走,當(dāng)其品牌滨彻、型號(hào)藕届、配置、等級(jí)疮绷、花色、包裝容量嚣潜、單位冬骚、生產(chǎn)日期、保質(zhì)期懂算、用途只冻、價(jià)格、產(chǎn)地等屬性中任一屬性與其他商品存在不同時(shí)计技,可稱為一個(gè)單品喜德。
2.1.2 表設(shè)計(jì)
一個(gè)商品可以有多個(gè)商品SKU,因此我們?cè)O(shè)計(jì)1:m的商品表和商品SKU表來保存商品信息垮媒。其中舍悯,商品表用于保存商品的通用屬性,比如商品名睡雇,總銷量萌衬,總評(píng)價(jià),控制商品是否上架等它抱;商品SKU表保存SKU的庫(kù)存秕豫,價(jià)格等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', # 商品平均評(píng)分
`sold_count` int(10) unsigned NOT NULL DEFAULT '0', # 商品總銷量
`review_count` int(10) unsigned NOT NULL DEFAULT '0', # 商品總評(píng)價(jià)數(shù)量
`price` decimal(10,2) NOT NULL, # 商品SKU的最低價(jià)格
`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價(jià)格
`stock` int(10) unsigned NOT NULL, # 庫(kù)存
`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 表設(shè)計(jì)
- 實(shí)現(xiàn)邏輯
商品收藏是用戶行為混移,收藏的是商品。一個(gè)用戶可以收藏多個(gè)商品侮穿,一個(gè)商品可以被多個(gè)用戶收藏歌径,是典型的m:n的模型關(guān)系,只需要新增一個(gè)中間表關(guān)聯(lián)用戶ID與商品ID亲茅,每當(dāng)用戶收藏/取消收藏商品時(shí)沮脖,添加/刪除一條中間表記錄即可。 - 表結(jié)構(gòu)
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, # 創(chuàng)建時(shí)間
`updated_at` timestamp NULL DEFAULT NULL, # 更新時(shí)間
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;