關(guān)于商城系統(tǒng)中商品類別的設(shè)計(jì)
以XiZiShop為例,如下效果圖:
上圖紅色方框所示為一級(jí)類別。
上圖所示為二級(jí)類別、三級(jí)類別和篩選條件類別,以及篩選條件的值。
數(shù)據(jù)庫設(shè)計(jì)步驟如下:
【步驟一】對(duì)于一級(jí)類別、二級(jí)類別,三級(jí)類別,我統(tǒng)一把它們放在一張表里面,名曰:欄目表(T_Columns),各級(jí)的父子關(guān)系通過表中的FatherCol這一列去進(jìn)行關(guān)聯(lián)。如下圖:
【步驟二】建立好存儲(chǔ)一級(jí)類別、二級(jí)類別和三級(jí)類別的表之后,再開始考慮“篩選條件表”(表名稱:T_FilterCategory)和“篩選條件值表”(表名稱:T_FilterAttributes) 的設(shè)計(jì)。
然后再分析“篩選條件表”和“篩選條件值表”之間的對(duì)應(yīng)關(guān)系。
同一個(gè)篩選條件可以有多個(gè)篩選條件值。例如:對(duì)于手機(jī)“品牌”來說,它下面可以有多個(gè)篩選條件值:三星、摩托羅拉、蘋果.....
同一個(gè)篩選條件值又可以被多個(gè)篩選條件所擁有。
觀察上圖中的紅色方框內(nèi)容,我發(fā)現(xiàn)手機(jī)“品牌”里有“三星”,筆記本“品牌”里也有“三星”,換句話說,“三星”既屬于手機(jī)“品牌”又屬于電腦“品牌”,這樣一來,“三星”就可以對(duì)應(yīng)多個(gè)“品牌”了,因此得出結(jié)論同一個(gè)篩選條件值有可能被多個(gè)篩選條件所擁有。
綜合上述1和2,我得出“篩選條件表”和“篩選條件值表”之間是多對(duì)多的關(guān)系。于是,按照數(shù)據(jù)庫設(shè)計(jì)規(guī)范,需要為這兩張表添加一個(gè)中間表,名曰:(RF_FilterCategory_TFilterAttributes)
然后建立它們的外鍵關(guān)聯(lián):
然后再分析“篩選條件表”和“欄目表”之間的對(duì)應(yīng)關(guān)系:
“欄目表”屬于“篩選條件表”的父表,即只有“欄目表”中的三級(jí)類別才和“篩選條件表”直接關(guān)聯(lián),如下圖:
分析它們的關(guān)系:
1:一個(gè)三級(jí)類別可以有多個(gè)篩選條件。
2:同一個(gè)篩選條件可以被多個(gè)三級(jí)類別擁有。如下圖:
如上圖:“品牌”和“價(jià)格”可以同時(shí)被三級(jí)類別中的“手機(jī)”和“對(duì)講機(jī)”擁有。所以,“欄目表”和“篩選條件表”之間也是多對(duì)多的關(guān)系。于是又需要建一個(gè) 中間表,名曰:(RF_Columns_FilterCategory),如下圖:
然后建立外鍵關(guān)系如下圖:
設(shè)計(jì)完這一步,整個(gè)關(guān)系圖如下:
UML圖:
到了這一步,似乎數(shù)據(jù)庫已經(jīng)設(shè)計(jì)的很完美了,但是它有一處致命的硬傷!
這個(gè)硬傷在哪兒呢,答案見續(xù)篇。
原文鏈接:http://www.cnblogs.com/twittersu/archive/2011/06/11/2078297.html
【編輯推薦】