設計一個無限級分類的數據表
阿新 • • 發佈:2018-05-11
互聯 body varchar space 語句 HR creat line pla
設計一個無限級分類的數據表是一個很常見的數據庫任務。比如你寫一個CMS,需要有4,5級分類的欄目,反正就是很普遍,所以還是需要了解一下。下面本專題的所有內容,都是我自己隨手演示寫寫,僅僅供參考,絕不是標準答案。
我們先設計一個數據表吧,一個可供無限級分類的數據表。
SQL語句設計如下:
01 |
CREATE TABLE `categories` ( |
02 |
`id` int (10) unsigned NOT NULL auto_increment, |
03 |
` name ` varchar (50) NOT NULL , |
04 |
`xname` varchar (50) NOT NULL , |
05 |
`parentid` int (10) default ‘0‘ , |
06 |
`parentid_list` varchar (20) default ‘0‘ , |
07 |
`depth` varchar (10) default NULL , |
08 |
`state` varchar (10) default ‘1‘ , |
09 |
`priority` varchar (10) default ‘0‘ , |
10 |
PRIMARY KEY (`id`) |
11 |
) DEFAULT CHARACTER SET utf8; |
一會再介紹為什麽字段要這麽設計,先插入測試數據。順便說下,數據是從亞馬遜那裏拿的幾個欄目。
01 |
-- ---------------------------- |
02 |
-- Records of categories |
03 |
-- ---------------------------- |
04 |
INSERT INTO `categories` VALUES ( ‘1‘ , ‘圖書‘ , null , ‘0‘ , ‘1‘ , ‘1‘ , ‘1‘ , ‘0‘ ); |
05 |
INSERT INTO `categories` VALUES ( ‘2‘ , ‘科技‘ , null , ‘1‘ , ‘1,2‘ , ‘2‘ , ‘1‘ , ‘0‘ ); |
06 |
INSERT INTO `categories` VALUES ( ‘3‘ , ‘計算機/互聯網‘ , null , ‘2‘ , ‘1,2,3‘ , ‘3‘ , ‘1‘ , ‘0‘ ); |
07 |
INSERT INTO `categories` VALUES ( ‘4‘ , ‘醫學‘ , null , ‘2‘ , ‘1,2,4‘ , ‘3‘ , ‘1‘ , ‘0‘ ); |
08 |
INSERT INTO `categories` VALUES ( ‘5‘ , ‘自然與科學‘ , null , ‘2‘ , ‘1,2,5‘ , ‘3‘ , ‘1‘ , ‘0‘ ); |
09 |
INSERT INTO `categories` VALUES ( ‘6‘ , ‘電腦辦公‘ , null , ‘0‘ , ‘6‘ , ‘1‘ , ‘1‘ , ‘0‘ ); |
10 |
INSERT INTO `categories` VALUES ( ‘7‘ , ‘電腦整機‘ , null , ‘6‘ , ‘6,7‘ , ‘2‘ , ‘1‘ , ‘0‘ ); |
11 |
INSERT INTO `categories` VALUES ( ‘8‘ , ‘筆記本‘ , null , ‘7‘ , ‘6,7,8‘ , ‘3‘ , ‘1‘ , ‘0‘ ); |
12 |
INSERT INTO `categories` VALUES ( ‘9‘ , ‘平板電腦‘ , null , ‘7‘ , ‘6,7,9‘ , ‘3‘ , ‘1‘ , ‘0‘ ); |
13 |
INSERT INTO `categories` VALUES ( ‘10‘ , ‘服務器‘ , null , ‘7‘ , ‘6,7,10‘ , ‘3‘ , ‘1‘ , ‘0‘ ); |
14 |
INSERT INTO `categories` VALUES ( ‘11‘ , ‘家用電器‘ , null , ‘0‘ , ‘11‘ , ‘1‘ , ‘1‘ , ‘0‘ ); |
15 |
INSERT INTO `categories` VALUES ( ‘12‘ , ‘廚房電器‘ , null , ‘11‘ , ‘11,12‘ , ‘2‘ , ‘1‘ , ‘0‘ ); |
16 |
INSERT INTO `categories` VALUES ( ‘13‘ , ‘電飯鍋‘ , null , ‘12‘ , ‘11,12,13‘ , ‘3‘ , ‘1‘ , ‘0‘ ); |
17 |
INSERT INTO `categories` VALUES ( ‘14‘ , ‘大家電‘ , null , ‘11‘ , ‘11,14‘ , ‘2‘ , ‘1‘ , ‘0‘ ); |
18 |
INSERT INTO `categories` VALUES ( ‘15‘ , ‘冰箱‘ , null , ‘14‘ , ‘11,14,15‘ , ‘3‘ , ‘1‘ , ‘0‘ ); |
插入數據之後,數據表大概就成了這個樣子:
現在就很直觀了吧,每個字段大概有什麽作用,應該也能看出來了。
數據表字段簡單說明:
列名 | 數據類型 | 默認值 | 備註 |
id | int | 自增主鍵 | |
name | varchar(50) | 分類類別名稱 | |
parenid | int | 0 | 父母分類Id |
parenid_list | varchar(20) | 0 | 分類的層級關系,從最高級到自己 |
Depth | varchar(10) | 1 | 深度,從1遞增 |
Status | varchar10) | 1 | 狀態:0禁用,1啟用 |
Priority | varchar(10) | 0 | 優先級,越大,同級顯示的時候越靠前 |
大概就設計成這樣,為什麽要這樣設計,後面章節慢慢敘述。當然會有設計上不合理的地方,僅僅拋磚引玉
設計一個無限級分類的數據表