1. 程式人生 > >DotNet菜鳥入門之無限極分類(一)設計篇

DotNet菜鳥入門之無限極分類(一)設計篇

對數 tar null 擴展 creat nvarchar 鏈表 文章 數據庫設計

寫這個教程的原因,是因為,無限極分類,在許多項目中,都用得到。而對於新手來說,不是很好理解,同時,操作上也有一些誤區或者不當之處。所以我就鬥膽,拋磚引玉一下,已一個常見的後臺左側頻道樹為例子,講解一下剖析一下無限極分類的實戰操作。

既然是寫給菜鳥的,那麽我就不話結構圖了,直接文字+代碼來說明吧。

正文

無限極分類的關鍵就在於數據庫設計時,進行了父類編號的記錄,從而把所有的分類,鏈接了起來,成為一個鏈表樣式的結構。

這次我要講的無限極分類設計如下:

技術分享圖片

(圖1)

創建的表的sql語句如下,具體字段的說明見(圖1)

CREATE TABLE Channel(
[id] [varchar](2000) NOT NULL,
[channelName] [nvarchar](50) NOT NULL,
[linkUrl] [varchar](200) NULL,
[parentID] [varchar](2000) NOT NULL,
[childNum] [int] NOT NULL,
[orderNum] [int] NOT NULL
)
其中,約定的基類編號為C,也就是說,第一級的分類,父編號為C,第一個分類的編號為C001
它的第一個子類編號為001,也就是說,每一級子類的編號為父類編號+ 000格式的數字。
舉例如下(名稱 編號 父編號):
  
|-食物 C001 C
|-----蔬菜 C001001 C001
|---------白菜 C001001001 C001001
|---------蘿蔔 C001001002 C001001
|---------冬瓜 C001001003 C001001
|-----水果 C001002 C001
|---------蘋果 C001002001 C001002
|---------橘子 C001002002 C001002
 

說明:

這樣設計的優點:

1)只要知道這個分類的編號,那麽去掉後三位,就是此類的父類編號。例如,食物這個類別,代碼是C001,那麽去掉後三位,他的父編號就是C,而蔬菜這個類別,代碼是C001001,去掉後三位,他的父類編號就是C001.

如此,只要知道了一個分類的編號後,就不用再去查詢數據庫,找他的父類編號了。可以直接用程序算出,他的父類編號。

2)方便的知道這個類別的深度,也就是幾級分類。算法就是——(分類編號長度-1)/3。

例如,食物這個分類的編號為 C001,那麽他的分類級別為: (4-1)/3 = 1。

那麽蔬菜這個分類的級別就是: (7-1)/3 = 2。為2級分類。

3)可以程序直接算出所有的父類,省去了遞歸的過程。

例如冬瓜這個分類,循環去掉三位後,得到他的父類編號依次為:

C001001 、 C001 、 C

設計的缺點:

1)主鍵不是數字類性,相對數字為主鍵的索引來說,速度稍慢,不過好在數據不會太多。

2)擴展性不是很好,可以看出,這個無限極分類,同級別的分類最多只能分到999級別,即C001到C999,如果你想更多,那麽可以設定為 C0001到C9999即9999個同類級別。不過一般說是無限極分類,但是999的同級別,一般情況下,就夠用了。

主要還是看需求來指定,是否是使用數字為主鍵和父類編號的分類,還是用字符的。

提示:如果使用數字作為主鍵和父類編號,那麽需要增加一個path路徑字段,用來記錄級別的路徑記錄。

此種無限極分類的設計,就介紹到這裏了。下一篇文章,寫一下這種設計的操作及相關代碼

DotNet菜鳥入門之無限極分類(一)設計篇