電商玩轉SKU


SKU作為商城的一個比較復雜的模塊,很容易把人給繞暈了,這里小可老師說一下自己的理解吧,不足之處還望指正。

一、SKU的概念

關於SKU的概念,網上有很多定義,有的偏商業有的偏程序,其實簡單理解就是一種商品的“子類”有多少,比如新出的蘋果11手機,有不同的顏色(黑白紅黃),不同的容量(64、128、256),顏色和容量之間可以組合成不同“子類”,而這個子類就是消費者最終購買到的產品。說白了就是決定價格和庫存的一個分類。

二、SKU的作用

上面提到了SKU的一個作用來定價格和庫存,比如綠色比較火,那么128的綠色可能就5999,黃色比較丑,那么128的黃色可能定價5799。綠色的售罄了,庫存為0,用戶就不能購買了。如果不分類,那就只能隨機發貨了。

SKU還有個作用就是幫助更好的展示商品,蘋果11基本就是容量和顏色來決定,但有的商品就比較復雜了,比如電腦,同一款電腦就有i5、i7,版本,內存有8g、16g,屏幕大小有13、14、15寸的,硬盤有256+1T,515ssd,顯卡那就更多了(假設有3種),如果按照排列組合,可能能組合出2*2*3*2*3=72種,這還是比較保守的情況預計的,如果顧客進來發現這么多種類可以選擇,他不會驚喜,可以選一會自己就煩了。所以SKU不是越多越好,當然也不是約少越好,根據商品的特質來制定SKU也是電商很重要的一個環節。

對於電商而言,SKU制定的合理與否也利於自己對商品的管理,進一步影響自己的進貨、倉庫分配等,這里就不展開了。

三、玩轉SKU

我們這里先規范幾個概念:

1、商品(goods):這里說的商品就是商品型號,比如蘋果11、小米10,聯想小新pro2020款等,當然商品的定義也不是絕對的,也是由電商來決定的,比如羅技的無線鼠標M275、M280幾乎沒啥區別,電商就當成一種商品來賣,這種情況文章暫時不做考慮,但大家要記住的是SKU的一切由電商決定,而不是程序員。

2、商品規格(spec):就是一個商品可以按照哪個標准分類,比如手機的容量就是一個規格,我們可以按照手機容量把蘋果11分為64g版本、128版本。顏色也是一個規格、蘋果11紅色版本、綠色版本等。通常商品規格都是屬於某個商品分類(商品分類的概念不用我講了吧,當然實際上規格也可能屬於某個商品,這里暫定為屬於分類,方便理解)的,他們之間是一對多關系、一個商品分類有多個規格。這里面需要注意的是不同分類的規格名稱可能相同,比如手機和電腦都有內存大小這個商品規格,但這兩個內存是不一樣的(主鍵不同)。但同一分類的規格不能相同,手機有了容量這個規格以后,就不能再給手機添加容量這個規格了。注意規格的划分不是固定的要根據商品實際情況來,例如上面提到的電腦的情況,通常i5版本的都是帶8g內存,i7都是16版本,那這兩個規格就可以合並成一個規格,分別是i5+8g、i7+16g。

3、規格屬性或者規格值(specValue):有了規格(容量、顏色)只是有了這么一個分類的標准,具體還要看規格有哪些值,就上面提到的64、128、256、紅色綠色等。規格和規格屬性之間也是一對多的關系,和上面一樣,一個規格可以有多個規格屬性、一個規格屬性只能屬於一個規格,即使出現衣服顏色有綠色、手機顏色也有綠色的情況,那這兩個綠色也不是一樣的綠色(主鍵不同)。同理,一個規格的規格屬性不能相同,手機的顏色有了綠色就不能再添加綠色了。

4、SKU。有了上面兩個的概念,那么SKU的概念也就呼之欲出了,就是規格屬性的組合,蘋果11的綠色128g是一個SKU、黃色64g也是一個SKU。注意SKU不管怎么划分,必須具體到(電商認為)不能再分類的商品上,蘋果11的綠色就不是一個合格的SKU,因為根據這個SKU無法決定價格和庫存。當然具體精確到什么程度是由電商決定的,比如有些商品是一樣的只是包裝的不同,盡管新包裝和老包裝是不一樣的,但電商認為這個差別可以忽略的話,那可以不必細分,將SKU合並,並取消包裝這個規格。

所以解決SKU可以歸結為解決四張表的問題,即

goods表,里面由id、名稱、價格、庫存

spec表,里面由主鍵、所屬分類,規格名稱

specValue表,里面有主鍵、所屬規格、屬性名稱

sku表,里面有主鍵、所屬商品、規格屬性值價格庫存等。

注意這里面價格和庫存這兩個字段,首先說價格,goods表中的價格字段可以用來顯示商品的最低價格或者顯示商品的價格范圍,也可以不存在。然后是庫存,可以是這個商品所有SKU的庫存總和,也可以不存在。至於SKU表里的價格和庫存,那就是這個SKU具體的價格和庫存。

再說一下sku表里的所屬規格屬性,假設綠色id為1、紅色id為2;64g id為3、128g id為4。那么綠色64g的手機SKU就是就有兩個規格屬性即1和3,紅色128g的手機SKU也有兩個屬性即2和4,我們可以把這這些屬性分別存儲,這需要再增加一張表進行管理,或者是把SKU表中的規格屬性放在一個字段當中,用,-等分隔符連接,那么綠色64g的手機的sku表的規格屬性就是1-3了。前者的好處是符合數據庫的范式,且能很好的解決后者1-3 3-1是不同取值但代表的是一個sku的問題,后者的好處是減少了一張表,再查找時特別方便,因為數據庫操作最多的還是查詢的操作,具體怎么取舍,根據實際情況來即可。

以上只是SKU的基本原理,實際實施起來的時候要原比這個復雜的多,因為不同的電商對不同商品的SKU的制定規則都是不盡相同的大家可以多看看各大平台的處理規則,靈活運用。

四、單規格VS多規格

上面提到的商品都是存在多規格的商品,有些商品沒有什么規格,比如書籍、唱片等,我們在前台展示商品時是展示SKU還是商品,這需要進行邏輯上的判斷,假設單規格商品我們認為其沒有SKU,那么商品的價格庫存等信息需要存儲在goods表中,那這種情況下goods表中的價格、庫存字段就必須存在。在展示商品時,需要對商品類型進行判斷,如果是單規格的則直接展示goods表中信息即可,如果是多規格商品,則進一步獲取商品sku進行展示。

上述方式會增加業務邏輯的復雜性,我們可以為單規格商品添加一個SKU,這樣我們在處理這兩種商品時可以采用同樣的方式進行處理,當然這樣做也會增加表的數據。對於單規格商品在商品詳情頁顯示規格又會顯得很奇怪,所以還是需要進行判斷,總之這兩種方式各有優劣,具體需要結合業務邏輯來選擇,更重要的是要服務電商,不要把燒腦的環節交給電商。

五、ER圖或許更直觀

sku問題的實現其實不難,難點在於如何設計表,相信看完上面我說的內容,很多小伙伴已經是一臉懵逼的狀態,不要緊,翠花,上圖:

 

 

 這種情況針對的是商品SKU表中直接存放該sku的全部規格屬性,那么sku表中就需要添加這么一個字段,用來存儲該sku擁有的全部規格屬性,可以用,-等符合分隔,例如1-2-4,2,3,6。同時我們注意到,1-2-4 1-4-2 2-1-4 2-4-1 4-1-2 4-2-1這六種情況其實代表的內容是一致的,但是在插入數據庫進行唯一性判斷時是無法判斷出來的,這時候我們可以在前端進行控制,讓規格按照一定的順序排序,那么以上6種情況都會轉換成一種情況處理。再一種處理方式就是入庫時對數據進行排列組合,把1-2-4拆成1 2 4再把所有的情況組合起來,以此來檢查唯一性。不管采取什么方式,都盡量不要對數據表進行遍歷操作。

轉載:
小可ThinkPHP學堂: https://www.xiaokethinkphp.com/thread-76-1-1.html

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM