首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> ASP.NET 基礎 >> 關於ASP.NET

ASP.NET 無限級分類設計:深度欄位實現高效遞歸查詢

     編輯:關於ASP.NET

傳統無限級分類依賴「ID、ParentID、Name」三欄,查詢子樹需遞歸或 CTE,效能隨層級增長而下降。本文提出「深度欄位」設計,將完整祖先路徑編碼儲存,實現單一 SQL 查詢全量子分類。

資料表結構

欄位說明範例值
ID主鍵40, 43
ParentID父分類 ID0 (根), 40
Name分類名稱新聞, 體育
Depth祖先路徑編碼40, 43, 40,43, 40,43,45
SortOrder同層排序23, 23.01, 23.02

Depth 欄位編碼規則

  • 根節點:Depth = ID(如 40、43)
  • 子節點:Depth = 父.Depth + "," + 自身ID(如 40,43、40,43,45)
  • 分隔符可自訂(|、-、_),建議使用非數字字元
  • 支援 99 層以上,理論無上限

高效查詢:單一 SQL 取得所有子分類

-- 取得 ID=43 及其所有後代
SELECT * FROM Category 
WHERE Depth = '43' OR Depth LIKE '43,%'

原理:Depth 以祖先 ID 開頭,LIKE '43,%' 精準匹配所有直系後代。索引支援下效能極佳,避免遞歸多次查詢。

SortOrder 欄位設計

  • 根層級:整數(23)
  • 第二層:父排序.兩位數序號(23.01、23.02)
  • 第三層:父排序.序號.序號(23.01.01)
  • 字串排序即為樹狀顯示順序,支援 99 子項/層

優缺點權衡

優點缺點
查詢子樹極快,單一 SQL移動節點需更新整棵子樹 Depth
排序直觀,字串排序即樹序Depth 欄位長度隨層級增長
資料庫手工維護直觀易懂需應用層保證編碼一致性
適合讀多寫少的分類系統不適用頻繁調整層級的場景

適用場景

  • 電商分類、CMS 欄目、知識庫標籤等相對固定的分類體系
  • 讀取頻率遠高於結構變更的系統
  • 需前端樹狀展開、麵包屑導航、SEO 友好 URL 的專案
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved