淘宝商品数据库设计的一些经验
前言
這幾個(gè)月都在做一個(gè)通過(guò)淘寶API線下管理淘寶店的系統(tǒng),學(xué)習(xí)了很多東西,這里想對(duì)淘寶商品表設(shè)計(jì)用自己的想法表現(xiàn)出來(lái),如果你覺(jué)得很扯淡,可以寫(xiě)下自己的看法.OK,切入正題.
淘寶的商品這塊的復(fù)雜程度,是我見(jiàn)過(guò)的電子商務(wù)網(wǎng)站中最復(fù)雜的,靈活性最高的.在看下文之前,先說(shuō)一下在淘寶中的以下名詞:關(guān)鍵屬性,銷(xiāo)售屬性,非關(guān)鍵屬性。如下圖:
關(guān)鍵屬性:能夠確認(rèn)唯一產(chǎn)品的屬性,可以是一個(gè),或者多個(gè)關(guān)鍵屬性的組合,比如:相機(jī)的"品牌""型號(hào)"能確定唯一的產(chǎn)品,服裝的"品牌""貨號(hào)"能確定唯一的產(chǎn)品
銷(xiāo)售屬性:組成SKU的特殊屬性,它會(huì)影響買(mǎi)家的購(gòu)買(mǎi)和賣(mài)家的庫(kù)存管理,如服裝的"顏色"、"套餐"和"尺碼",注意這里的SKU,淘寶銷(xiāo)售屬性組合成SKU
非關(guān)鍵屬性:就是商品屬性了,一些對(duì)商品進(jìn)行描述的屬性
特征量,特征值的設(shè)計(jì)
最初了解這種設(shè)計(jì),是項(xiàng)目經(jīng)理的指導(dǎo),他瞅一眼數(shù)據(jù)結(jié)構(gòu)之后立馬說(shuō):典型的特征量對(duì)應(yīng)特征值的設(shè)計(jì)。額,佩服。恩,看下下圖這2個(gè)表的數(shù)據(jù),就很清楚了,
在特征量這個(gè)表中,存放所有的例如:品牌,系列,顏色,尺碼 這些名稱(chēng),在特征值中存放具體的值,比如衣服有12種顏色,那么左表中有 ID:1, 名字:顏色,在右表中存放
黃色,綠色等等具體的值,特征量表是一個(gè)父子關(guān)系,比如有的品牌下面有系列,系列下面可能還有系列,右表的數(shù)據(jù)存在冗余是不可避免的,比如衣服有24個(gè)顏色,鞋有24個(gè)顏色,雖然特征值是一樣,但是是屬于不同的特征量的。
那么如上圖所示,(注意,上圖中特征量表我并沒(méi)有添加父子關(guān)系,在設(shè)計(jì)的時(shí)候是有父子關(guān)系的)我要添加一個(gè)避孕套商品,最少分為2步,首先在類(lèi)別表中選中計(jì)生用品-->一直到避孕套這個(gè)子分類(lèi),通過(guò)子分類(lèi)的ID,級(jí)聯(lián)查詢(xún)特征量和特征值這個(gè)表,得到諸如品牌,大小,顏色這種屬性,如果存在層級(jí)關(guān)系,比如品牌下面的系列,系列下面還可能有系列,通過(guò)特征量表中的父子關(guān)系,繼續(xù)查詢(xún)出來(lái),當(dāng)然,也可以通過(guò)類(lèi)目ID一次性查詢(xún)出來(lái),然后進(jìn)行關(guān)系顯示。
對(duì)具有不同屬性的同種商品做的不同價(jià)格,數(shù)量設(shè)計(jì)?
我們看在淘寶中添加衣服和數(shù)碼相機(jī)的情況,這里會(huì)出現(xiàn)選擇"關(guān)鍵屬性" 顏色+尺碼之后,出現(xiàn)需要對(duì)不同顏色尺碼的組合填寫(xiě)價(jià)格和數(shù)量和商家外部碼,相機(jī)則是顏色+套餐+外部碼,而到了洗發(fā)水就是容量+多買(mǎi)多便宜+外部碼,這里就是上面介紹的SKU,如果你還不了解SKU,可以做下了解,這樣子做的直接好處就是,不同的搭配可能有不同的價(jià)格,做庫(kù)存和銷(xiāo)量的統(tǒng)計(jì)的時(shí)候就能做到準(zhǔn)確統(tǒng)計(jì),通過(guò)商家的外部編碼能讓商家關(guān)聯(lián)本地系統(tǒng),也是為了做統(tǒng)計(jì)和庫(kù)存的方便。
恩 大伙瞅瞅我的設(shè)計(jì)吧,要拍,請(qǐng)輕拍
2011-03-23 修正:這篇文章以我現(xiàn)在的理解來(lái)說(shuō),表設(shè)計(jì)存在問(wèn)題!!請(qǐng)看到這里馬上離開(kāi)!你也可以關(guān)注我后續(xù)淘寶分析相關(guān)文章~
1.類(lèi)目和特征量,特征量和特征值并不是多對(duì)多的關(guān)系,是一對(duì)多的關(guān)系
2.類(lèi)目和特征量都是父子表
3.商品的關(guān)鍵屬性如:品牌 系列(只存放子及ID),其它屬性,比如說(shuō)褲子的褲型,適合人群,等屬性存入基本屬性表,這里品牌系列只存放子及ID是因?yàn)榭紤]到,不想建立過(guò)多的表,用戶(hù)搜索用例如lunce把全部信息建好索引,做統(tǒng)計(jì)或者數(shù)據(jù)分析的時(shí)候也是可以通過(guò)父子特征量的父子關(guān)系進(jìn)行的。
4.銷(xiāo)售屬性的分開(kāi)是因?yàn)?#xff0c;比如洗發(fā)水,我們的特征值表中的值可能不能符合用戶(hù)需求,那么可以讓用戶(hù)自定義值,顏色可以上傳圖片等,而且銷(xiāo)售屬性一般為多個(gè)組合,所以單獨(dú)建立一個(gè)表。
5.商品的SKU表,這個(gè)特征量ID的組合實(shí)際上就是銷(xiāo)售屬性表的ID組合
當(dāng)我們添加一個(gè)商品的時(shí)候,在不考慮頁(yè)面展現(xiàn)的情況下需要這幾步:
1.插入商品基本信息到商品表?
2.插入基本屬性和關(guān)鍵屬性到商品基本屬性表?
3.插入銷(xiāo)售屬性到銷(xiāo)售屬性表
4.插入銷(xiāo)售屬性ID組合,數(shù)量,價(jià)格等到商品SKU表。
當(dāng)我們?cè)陧?yè)面上展示商品的時(shí)候:
1.級(jí)聯(lián)6個(gè)表查詢(xún)出商品所需要的信息,由于關(guān)鍵屬性有多級(jí),這里只存了子及,需要做一次遞歸。當(dāng)然可以考慮緩存等自己的實(shí)現(xiàn)方法
2.分析商品SKU組合,生成銷(xiāo)售屬性組合及約束,比如顏色+尺碼 選擇之后的不同價(jià)格,是否還有貨。顏色有圖片的用上傳的圖片代替默認(rèn)背景
難點(diǎn)在于:
1.頁(yè)面的展現(xiàn)不管前臺(tái)還是后臺(tái)都必須動(dòng)態(tài)構(gòu)建,在動(dòng)態(tài)構(gòu)建的基礎(chǔ)上加上基本的驗(yàn)證,比如用戶(hù)選擇了 顏色A+尺碼,庫(kù)存只有3件,數(shù)量填寫(xiě)了5,必要提示用戶(hù)沒(méi)有了這么多數(shù)量,動(dòng)態(tài)構(gòu)建中還存在某些屬性有層級(jí)關(guān)系,需要按照自己的策略選擇一次性加載或者AJAX加載,進(jìn)行分析顯示
2.幾個(gè)表關(guān)聯(lián)查詢(xún)的設(shè)計(jì),何種方法能最大化減小程序的復(fù)雜程度,是直接在數(shù)據(jù)庫(kù)中搞定,還是數(shù)據(jù)庫(kù)結(jié)合內(nèi)存表(緩存特征量和特征值).
頁(yè)面上的展現(xiàn)和其它設(shè)計(jì)
我在實(shí)際項(xiàng)目中添加商品的做法是,序列化屬性成json字符串到頁(yè)面,根據(jù)特征量中的是否是枚舉,是否是父屬性,是否關(guān)鍵屬性,是否銷(xiāo)售屬性來(lái)動(dòng)態(tài)創(chuàng)建頁(yè)面表單,具體也可以看看淘寶添加產(chǎn)品的頁(yè)面。
總結(jié)
以上是生活随笔為你收集整理的淘宝商品数据库设计的一些经验的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 自由源自于自律 及其他三则分享
- 下一篇: 9月数据库排行:Microsoft SQ