spu sku 電商商品模塊設計

電商項目-商品表(spu)、規格表(sku)設計
最近在做一箇中小型購物商城,商品的種類繁多,每一種商品具有不同的規格,不同的規格有相應的價格和庫存;
這個設計的核心難點在於:不同商品具有不同的屬性,如何設計通用的存儲方案?
這裏拿iphone6s舉例,它身上有很多的屬性和值, 比如
spu 指的是商品(iphone6s),spu屬性就是不會影響到庫存和價格的屬性, 又叫關鍵屬性,與商品是一對一的關係,比如
sku指的是具體規格單品(玫瑰金 16G),sku屬性就是會影響到庫存和價格的屬性, 又叫銷售屬性,與商品是多對一的關係,比如
所以iphone6s則會生成 3 * 3 = 9 個 sku

上面這張圖是我項目中用到的商品相關的幾張數據表, 請只關注有數據值的字段,其它爲業務需要,一共包含如下5張表:
此表採用無限層級樹狀數據結構,程序使用遞歸算法來遍歷分類下的所有子分類,parent_id是父級分類, parent_id=0時說明是根節點, 屬於一級類別; 如使用遞歸查詢出100034包含100037子類別,依次類推,這樣就構成一個可以無限擴展的數字結構;


spu表中關鍵字段是category_id和attribute_list兩個字段: category_id 記錄這個商品屬於哪個分類, 用於通過分類進行商品搜索; attribute_list 記錄的是所有屬性集合,這個字段採用json格式存儲便於前端解析;

前端解析後可以在頁面顯示出商品的所有屬性, 用戶點擊選擇出屬性組合後,前端可以拼接成{"內存":"2G","顏色":"紅色","尺寸":"20cm"}這樣的json格式加上商品id在(商品規格表 mmall_product_specs)查詢到具體的單品,隨即獲取到具體單品的庫存和價格等信息;
sku表保存的是具體的單品信息,比如具體規格的庫存和價格等,核心字段是product_id和product_specs,product_id 記錄的是spu表中的商品id,product_specs 記錄的是該單品具體的屬性值(規格值);
屬性key表和屬性value表僅用於管理後臺頁面生成屬性選項,管理員在發佈新商品時勾選屬性,方便規格的錄入和保證正確性;
這裏我使用了兩張橫表spu表和sku表實現不同商品的存儲,spu表使用attribute_list字段保存屬性集合,查詢時使用product_id和product_specs去sku表中獲取的具體的單品信息, spu表中可以增加一些商品的公共信息字段,例如名稱、發佈的商家、發佈日期、上架狀態, sku表中增加一些每個單品不同的字段,比如不同的單品有不同圖片和名稱或者詳情說明等等,反正根據業務進行擴展
總結, 上述數據表設計方案適用於商品類別差異不是很大的情形,通過表的字段可以發現不同的商品之間變化的信息只有 attribute_list 字段, 而這個字段通過json來存儲各種不同的屬性集合, 同樣sku表中變化的字段只有 product_specs 也是通過json來存儲各種不同屬性組合。
核心思路就是把彈性字段使用json存儲,這樣設計的優點是數據表結構穩定,不用在商品增加屬性後增加字段, 缺點是商品數據的解析複雜,彈性字段需要在業務代碼中進行處理,增加了業務代碼的複雜度。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章