1. 程式人生 > >MySQL基礎入門學習【9】無限級分類表設計

MySQL基礎入門學習【9】無限級分類表設計

父親 連接 參照物 insert gpo 平板電視 生活電器 type mysql

比如: 圖書/小說、文學.../四大名著、戲曲.../...

理論上可以設計很多張表;

但是隨著分類逐步增多,這些表的數目不可能無限擴展;

所以對於無限級分類表一般我們采用如下形式(通過自身的連接來實現的):

技術分享圖片

這個例子中我們至少設計三個字段: 分類的id、分類的名稱、父類的id.

插入記錄:

  INSERT tdb_goods_types(type_name,parent_id) VALUES(‘家用電器‘,DEFAULT);
  INSERT tdb_goods_types(type_name,parent_id) VALUES(‘電腦、辦公‘,DEFAULT);
  INSERT tdb_goods_types(type_name,parent_id) VALUES(‘大家電‘,1);
  INSERT tdb_goods_types(type_name,parent_id) VALUES(‘生活電器‘,1);
  INSERT tdb_goods_types(type_name,parent_id) VALUES(‘平板電視‘,3);
  INSERT tdb_goods_types(type_name,parent_id) VALUES(‘空調‘,3);
  INSERT tdb_goods_types(type_name,parent_id) VALUES(‘電風扇‘,4);
  INSERT tdb_goods_types(type_name,parent_id) VALUES(‘飲水機‘,4);
  INSERT tdb_goods_types(type_name,parent_id) VALUES(‘電腦整機‘,2);
  INSERT tdb_goods_types(type_name,parent_id) VALUES(‘電腦配件‘,2);
  INSERT tdb_goods_types(type_name,parent_id) VALUES(‘筆記本‘,9);
  INSERT tdb_goods_types(type_name,parent_id) VALUES(‘超級本‘,9);
  INSERT tdb_goods_types(type_name,parent_id) VALUES(‘遊戲本‘,9);
  INSERT tdb_goods_types(type_name,parent_id) VALUES(‘CPU‘,10);
  INSERT tdb_goods_types(type_name,parent_id) VALUES(‘主機‘,10);

技術分享圖片

舉例說明:

這裏家用電器、電腦辦公為頂級分類,沒有父親節點,因此parent_id 為0

大家電、生活電器是家用電器的子類,parent_id為1

平板電視、空調屬於大家電 --> 3

電風扇、飲水機屬於生活電器 --> 4

以此類推...

通過【自身連接】實現查找: 同一個數據表對其自身進行連接。一定要取別名,否則無法區分!!!

想象現在在上圖的表的右側有一個結構一模一樣的表,想好哪個是父表哪個是子表;

例如右邊是子表(查詢表)、左邊是父表,則左表中的parent_id就沒有用了,因為子表中的parent_id字段指向的是父表中的type_id字段

技術分享圖片

我們也可以查找子類、父類和父類下的子類:

參照物不同,現在參照父

技術分享圖片

父類以及父類下的子類的數目:

技術分享圖片

MySQL基礎入門學習【9】無限級分類表設計