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

PHP 樹形結構資料存儲方案:毗鄰目錄模式與預排序遍歷樹算法詳解

     編輯:PHP 相關知識

為什麼需要樹形結構存儲?

產品分類、多級論壇、郵件列表等場景都涉及多層級資料。關係型資料庫本質是平面表格,需將樹狀結構「翻譯」為關係模型。常見兩種設計模式:

1. 毗鄰目錄模式

每筆記錄存儲 parent_id 指向父節點。優點:結構簡單,增刪改容易。缺點:遞歸查詢子孫節點效率低,需多次查詢或存儲過程。

2. 預排序遍歷樹算法

為每個節點分配 left、right 值(基於深度優先遍歷)。優點:單次查詢即可獲取整棵子樹、祖先路徑、節點深度等。缺點:插入/移動節點需重新計算大量行的左右值,寫入效能較差。

示例資料:食品分類

Food
|-- Fruit
|   |-- Red
|   |   |-- Cherry
|   |-- Yellow
|       |-- Banana
|-- Meat
    |-- Beef
    |-- Pork

選型建議

  • 讀多寫少、層級固定 → 採用預排序遍歷樹。
  • 頻繁增刪改、層級不深 → 毗鄰目錄模式配合遞歸或緩存。
  • 現代專案亦可考慮 Closure Table(關係表存儲所有祖先後代關係)或使用支援遞歸 CTE 的資料庫(MySQL 8.0+, PostgreSQL)。
文中英文術語為作者自譯,正確學術名稱為:Adjacency List Model 與 Modified Preorder Tree Traversal (MPTT)。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved