电商系统设计之商品(上)
電商大伙每天都在用,類似某貓,某狗等。 電商系統設計看似復雜又很簡單,看似簡單又很復雜。本章適合初級工程師及中級工程師細看,大佬請隨意
1. 前言
商品的設計在電商系統中占據重要地位,如何設計出高擴展,高性能的商品系統并非一件簡單的事情,我的設計是觀摩互聯網各大佬的設計后自行研究的,并非完全正確,但也不完全錯誤,現在我設計的這套電商系統已經在使用,如果在邏輯上遇到什么問題,會及時修改我關于電商系統相關文章的設計思想部分。
?
2. 元素
見上圖,本次我們先講解下系統規格與自定義規格、系統屬性與自定義屬性的關于及其他們存在的意義。
2.1 SPU
SPU(Standard Product Unit)標準化產品單元
什么叫標準化產品單元?
拋棄標準化一詞來看,產品單元?就是以一個產品為一個單位。例如你是手機銷售商,你在廠家進貨的時候說我要iphoneX 100部,型號隨意規格隨意,進貨的時候沒考慮到內存或者屏幕尺寸,這個時候你就把iphoneX這個商品當作一個單位。這就是產品單位。再談標準化,只是一些人或一個人制定的這么一個標準,所以稱為標準化產品單元,不要拿百度百科上的解釋反駁我,我只是用更通俗易懂的方式解釋一下SPU。
例如iphoneX的價格也有不同的地方,分別為iphoneX 64g 是8888,iphoneX 256g是18888。這個時候我們不能建立2個SPU去管理這2個商品。這個時候就需要用到SKU的概念了。
2.2 SKU
SKU(Stock Keeping Unit)庫存量單元
什么叫庫存量單位?
字面意思來看,庫存則是指的某個商品的某個規格還有多少件,這個時候就不能只針對商品了。上面的例子iphoneX有2個不同規格的商品,這個時候無法計算其每個規格的庫存(創建2個商品可是不切實際,未來管理會很復雜,就例如安踏的跑鞋有十幾個尺碼,難道要創建十幾個商品嗎?),此時只能針對當前商品再創建子商品,我們叫它規格,例如iphoneX?有 存儲和顏色2個規格
有木有發現還是有點問題?那具體的存儲大小與具體顏色該如何表達呢?這個時候需要創建規格的子商品,我們稱他為屬性
這時每個屬性的結合就是一個新的商品,我們稱它為SKU,一個SPU對應著N個SKU
這樣就生成了N個商品
-
iphonex 64G白色
-
iphonex 32G黑色
-
iphonex 256G白色 等等…
2.3 系統規格/屬性
為什么要設立系統規格屬性呢?
盜用一張淘寶的圖,以上都是根據分類品牌設定好的規格及屬性
主要是為了方便商家添加商品及其對商品的規格屬性進行統一的管理,當然一個電商系統在前期運營的情況下盡量減少系統屬性規格的使用(方便商家入住嘛)。
自定義屬性就不用說了。不讓商家添加自己的規格和尺碼什么的怎么能行?
?
3. 數據
具體數據表的設計如下
3.1 product
商品表 (spu表)
CREATE?TABLE?`product`?(`id`?int(10)?unsigned?NOT?NULL?AUTO_INCREMENT,`name`?varchar(255)?COLLATE?utf8mb4_unicode_ci?NOT?NULL?COMMENT?'商品標題',`category_id`?int(11)?NOT?NULL?COMMENT?'商品分類編號',`mer_id`?int(11)?NOT?NULL?COMMENT?'商家編號',`freight_id`?int(11)?DEFAULT?NULL,`type_id`?tinyint(4)?NOT?NULL?COMMENT?'類型編號',`sketch`?varchar(255)?COLLATE?utf8mb4_unicode_ci?DEFAULT?NULL?COMMENT?'簡述',`intro`?text?COLLATE?utf8mb4_unicode_ci?NOT?NULL?COMMENT?'商品描述',`keywords`?varchar(255)?COLLATE?utf8mb4_unicode_ci?DEFAULT?NULL?COMMENT?'商品關鍵字',`tags`?varchar(255)?COLLATE?utf8mb4_unicode_ci?DEFAULT?NULL?COMMENT?'標簽',`marque`?varchar(255)?COLLATE?utf8mb4_unicode_ci?NOT?NULL?COMMENT?'商品型號',`barcode`?varchar(255)?COLLATE?utf8mb4_unicode_ci?NOT?NULL?COMMENT?'倉庫條碼',`brand_id`?int(11)?NOT?NULL?COMMENT?'品牌編號',`virtual`?int(11)?NOT?NULL?DEFAULT?'0'?COMMENT?'虛擬購買量',`price`?decimal(8,2)?NOT?NULL?COMMENT?'商品價格',`market_price`?decimal(8,2)?NOT?NULL?COMMENT?'市場價格',`integral`?int(11)?NOT?NULL?DEFAULT?'0'?COMMENT?'可使用積分抵消',`stock`?int(11)?NOT?NULL?COMMENT?'庫存量',`warning_stock`?int(11)?NOT?NULL?COMMENT?'庫存警告',`picture_url`?varchar(125)?COLLATE?utf8mb4_unicode_ci?NOT?NULL?COMMENT?'封面圖',`posters`?varchar(125)?COLLATE?utf8mb4_unicode_ci?DEFAULT?NULL,`status`?tinyint(4)?NOT?NULL?COMMENT?'狀態?-1=>下架,1=>上架,2=>預售,0=>未上架',`state`?tinyint(4)?NOT?NULL?DEFAULT?'0'?COMMENT?'審核狀態?-1?審核失敗?0?未審核?1?審核成功',`is_package`?enum('0','1')?COLLATE?utf8mb4_unicode_ci?NOT?NULL?DEFAULT?'0'?COMMENT?'是否是套餐',`is_integral`?enum('0','1')?COLLATE?utf8mb4_unicode_ci?NOT?NULL?DEFAULT?'0'?COMMENT?'是否是積分產品',`sort`?int(11)?NOT?NULL?DEFAULT?'99'?COMMENT?'排序',`deleted_at`?timestamp?NULL?DEFAULT?NULL,`created_at`?timestamp?NULL?DEFAULT?NULL,`updated_at`?timestamp?NULL?DEFAULT?NULL,PRIMARY?KEY?(`id`) )?ENGINE=InnoDB?AUTO_INCREMENT=24?DEFAULT?CHARSET=utf8mb4?COLLATE=utf8mb4_unicode_ci;3.2 system_attribute
系統規格表
CREATE?TABLE?`system_attribute`?(`id`?int(10)?unsigned?NOT?NULL?AUTO_INCREMENT,`category_id`?int(11)?NOT?NULL?COMMENT?'商品類別編號',`name`?varchar(25)?COLLATE?utf8mb4_unicode_ci?NOT?NULL?COMMENT?'屬性名稱',`sort`?int(11)?NOT?NULL?DEFAULT?'999'?COMMENT?'排列次序',PRIMARY?KEY?(`id`),KEY?`product_attribute_category_id_name_index`?(`category_id`,`name`) )?ENGINE=InnoDB?AUTO_INCREMENT=8?DEFAULT?CHARSET=utf8mb4?COLLATE=utf8mb4_unicode_ci;3.3 system_attribute_option
系統屬性表
CREATE?TABLE?`product_attribute_option`?(`id`?int(10)?unsigned?NOT?NULL?AUTO_INCREMENT,`name`?varchar(125)?COLLATE?utf8mb4_unicode_ci?NOT?NULL?COMMENT?'選項名稱',`attr_id`?int(11)?NOT?NULL?COMMENT?'屬性編碼',`sort`?int(11)?NOT?NULL?DEFAULT?'999'?COMMENT?'排序',PRIMARY?KEY?(`id`),KEY?`product_attribute_option_name_attr_id_index`?(`name`,`attr_id`) )?ENGINE=InnoDB?AUTO_INCREMENT=5?DEFAULT?CHARSET=utf8mb4?COLLATE=utf8mb4_unicode_ci;3.4 product_attribute_and_option
規格屬性綁定表
CREATE?TABLE?`product_attribute_and_option`?(`id`?int(10)?unsigned?NOT?NULL?AUTO_INCREMENT,`sku_id`?int(11)?NOT?NULL?COMMENT?'sku編碼',`option_id`?int(11)?NOT?NULL?DEFAULT?'0'?COMMENT?'屬性選項編碼',`attribute_id`?int(11)?NOT?NULL?COMMENT?'屬性編碼',`sort`?int(11)?NOT?NULL?DEFAULT?'999'?COMMENT?'排序',`supplier_option_id`?int(11)?DEFAULT?NULL,PRIMARY?KEY?(`id`),KEY?`product_attribute_and_option_sku_id_option_id_attribute_id_index`?(`sku_id`,`option_id`,`attribute_id`) )?ENGINE=InnoDB?AUTO_INCREMENT=6335?DEFAULT?CHARSET=utf8mb4?COLLATE=utf8mb4_unicode_ci;3.5 product_sku
sku表
CREATE?TABLE?`product_sku`?(`id`?int(10)?unsigned?NOT?NULL?AUTO_INCREMENT,`product_id`?int(11)?NOT?NULL?COMMENT?'商品編碼',`name`?varchar(125)?COLLATE?utf8mb4_unicode_ci?NOT?NULL?COMMENT?'sku名稱',`img`?varchar(255)?COLLATE?utf8mb4_unicode_ci?DEFAULT?NULL?COMMENT?'主圖',`price`?decimal(8,2)?NOT?NULL?COMMENT?'價格',`stock`?int(11)?NOT?NULL?DEFAULT?'0'?COMMENT?'庫存',`code`?varchar(255)?COLLATE?utf8mb4_unicode_ci?DEFAULT?NULL?COMMENT?'商品編碼',`barcode`?varchar(255)?COLLATE?utf8mb4_unicode_ci?DEFAULT?NULL?COMMENT?'商品條形碼',`data`?varchar(255)?COLLATE?utf8mb4_unicode_ci?DEFAULT?NULL?COMMENT?'sku串',PRIMARY?KEY?(`id`),KEY?`product_sku_name_product_id_index`?(`name`,`product_id`) )?ENGINE=InnoDB?AUTO_INCREMENT=530?DEFAULT?CHARSET=utf8mb4?COLLATE=utf8mb4_unicode_ci;3.6 product_attribute
自定義規格表
CREATE?TABLE?`product_attribute`?(`id`?int(10)?unsigned?NOT?NULL?AUTO_INCREMENT,`product_id`?int(11)?NOT?NULL?COMMENT?'商品編碼',`name`?varchar(125)?COLLATE?utf8mb4_unicode_ci?NOT?NULL?COMMENT?'規格名稱',`sort`?int(11)?NOT?NULL?DEFAULT?'999'?COMMENT?'排序',PRIMARY?KEY?(`id`),KEY?`product_supplier_attribute_name_product_id_index`?(`name`,`product_id`) )?ENGINE=InnoDB?AUTO_INCREMENT=40?DEFAULT?CHARSET=utf8mb4?COLLATE=utf8mb4_unicode_ci;?
4. 致謝
其實在商品的設計層面看懂后還是很簡單的,后續文章主要講解的更多的是這些數據該如何存儲更合理。如果設計不合理例如商品添加很簡單,但是修改商品就很復雜。在前期設計上我們要盡量避免這些“坑”
謝謝你看到這里,希望我的文章能夠幫助到你。有什么問題可以在評論區留言,我看到會第一時間回復。謝謝
總結
以上是生活随笔為你收集整理的电商系统设计之商品(上)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 云VS本地,一言难尽的ERP
- 下一篇: 电商系统设计之商品(下)