樹形結構資料儲存方案(三):閉包表

發表於2017-09-01

將Closure Table翻譯成閉包表不知道是否合適,閉包表的思路和物化路徑差不多,都是空間換時間,Closure Table,一種更為徹底的全路徑結構,分別記錄路徑上相關結點的全展開形式。能明晰任意兩結點關係而無須多餘查詢,級聯刪除和結點移動也很方便。但是它的儲存開銷會大一些,除了表示結點的Meta資訊,還需要一張專用的關係表。

以下圖舉例資料舉例:

tree

建立主表:

建立關係表:

其中

  • Ancestor代表祖先節點
  • Descendant代表後代節點
  • Distance 祖先距離後代的距離

新增資料(建立儲存過程)

完成後2張表的資料大致是這樣的:(注意:每個節點都有一條到其本身的記錄。)

Closure-Table-1

Closure-Table-2

查詢Fruit下所有的子節點:

查詢Fruit下直屬子節點:

查詢Fruit所處的層級:

另外要刪除節點也非常的簡單,這裡就不再做過多的闡述。

參考連結:

  • https://coderwall.com/p/lixing/closure-tables-for-browsing-trees-in-sql

相關文章