這幾個月都在做一個通過淘寶API線下管理淘寶店的系統,學習了很多東西,這里想對淘寶商品表設計用自己的想法表現出來,如果你覺得很扯淡,可以寫下自己的看法.OK,切入正題.
淘寶的商品這塊的復雜程度,是我見過的電子商務網站中最復雜的,靈活性最高的.在看下文之前,先說一下在淘寶中的以下名詞:關鍵屬性,銷售屬性,非關鍵屬性。如下圖:
關鍵屬性:能夠確認唯一產品的屬性,可以是一個,或者多個關鍵屬性的組合,比如:相機的"品牌""型號"能確定唯一的產品,服裝的"品牌""貨號"能確定唯一的產品
銷售屬性:組成SKU的特殊屬性,它會影響買家的購買和賣家的庫存管理,如服裝的"顏色"、"套餐"和"尺碼",注意這里的SKU,淘寶銷售屬性組合成SKU
非關鍵屬性:就是商品屬性了,一些對商品進行描述的屬性
特征量,特征值的設計
最初了解這種設計,是項目經理的指導,他瞅一眼數據結構之后立馬說:典型的特征量對應特征值的設計。額,佩服。恩,看下下圖這2個表的數據,就很清楚了,
在特征量這個表中,存放所有的例如:品牌,系列,顏色,尺碼 這些名稱,在特征值中存放具體的值,比如衣服有12種顏色,那么左表中有 ID:1, 名字:顏色,在右表中存放
黃色,綠色等等具體的值,特征量表是一個父子關系,比如有的品牌下面有系列,系列下面可能還有系列,右表的數據存在冗余是不可避免的,比如衣服有24個顏色,鞋有24個顏色,雖然特征值是一樣,但是是屬于不同的特征量的。
那么如上圖所示,(注意,上圖中特征量表我并沒有添加父子關系,在設計的時候是有父子關系的)我要添加一個避孕套商品,最少分為2步,首先在類別表中選中計生用品-->一直到避孕套這個子分類,通過子分類的ID,級聯查詢特征量和特征值這個表,得到諸如品牌,大小,顏色這種屬性,如果存在層級關系,比如品牌下面的系列,系列下面還可能有系列,通過特征量表中的父子關系,繼續查詢出來,當然,也可以通過類目ID一次性查詢出來,然后進行關系顯示。
對具有不同屬性的同種商品做的不同價格,數量設計?
我們看在淘寶中添加衣服和數碼相機的情況,這里會出現選擇"關鍵屬性" 顏色+尺碼之后,出現需要對不同顏色尺碼的組合填寫價格和數量和商家外部碼,相機則是顏色+套餐+外部碼,而到了洗發水就是容量+多買多便宜+外部碼,這里就是上面介紹的SKU,如果你還不了解SKU,可以做下了解,這樣子做的直接好處就是,不同的搭配可能有不同的價格,做庫存和銷量的統計的時候就能做到準確統計,通過商家的外部編碼能讓商家關聯本地系統,也是為了做統計和庫存的方便。
恩 大伙瞅瞅我的設計吧,要拍,請輕拍
2011-03-23 修正:這篇文章以我現在的理解來說,表設計存在問題!!請看到這里馬上離開!你也可以關注我后續淘寶分析相關文章~
1.類目和特征量,特征量和特征值并不是多對多的關系,是一對多的關系
2.類目和特征量都是父子表
3.商品的關鍵屬性如:品牌 系列(只存放子及ID),其它屬性,比如說褲子的褲型,適合人群,等屬性存入基本屬性表,這里品牌系列只存放子及ID是因為考慮到,不想建立過多的表,用戶搜索用例如lunce把全部信息建好索引,做統計或者數據分析的時候也是可以通過父子特征量的父子關系進行的。
4.銷售屬性的分開是因為,比如洗發水,我們的特征值表中的值可能不能符合用戶需求,那么可以讓用戶自定義值,顏色可以上傳圖片等,而且銷售屬性一般為多個組合,所以單獨建立一個表。
5.商品的SKU表,這個特征量ID的組合實際上就是銷售屬性表的ID組合
當我們添加一個商品的時候,在不考慮頁面展現的情況下需要這幾步:
1.插入商品基本信息到商品表
2.插入基本屬性和關鍵屬性到商品基本屬性表
3.插入銷售屬性到銷售屬性表
4.插入銷售屬性ID組合,數量,價格等到商品SKU表。
當我們在頁面上展示商品的時候:
1.級聯6個表查詢出商品所需要的信息,由于關鍵屬性有多級,這里只存了子及,需要做一次遞歸。當然可以考慮緩存等自己的實現方法
2.分析商品SKU組合,生成銷售屬性組合及約束,比如顏色+尺碼 選擇之后的不同價格,是否還有貨。顏色有圖片的用上傳的圖片代替默認背景
難點在于:
1.頁面的展現不管前臺還是后臺都必須動態構建,在動態構建的基礎上加上基本的驗證,比如用戶選擇了 顏色A+尺碼,庫存只有3件,數量填寫了5,必要提示用戶沒有了這么多數量,動態構建中還存在某些屬性有層級關系,需要按照自己的策略選擇一次性加載或者AJAX加載,進行分析顯示
2.幾個表關聯查詢的設計,何種方法能最大化減小程序的復雜程度,是直接在數據庫中搞定,還是數據庫結合內存表(緩存特征量和特征值).
頁面上的展現和其它設計
我在實際項目中添加商品的做法是,序列化屬性成json字符串到頁面,根據特征量中的是否是枚舉,是否是父屬性,是否關鍵屬性,是否銷售屬性來動態創建頁面表單,具體也可以看看淘寶添加產品的頁面。
作者:活雷鋒
原文:https://www.cnblogs.com/mmmjiang13/archive/2010/11/04/1868609.html