類似的情況在實務上有遇過很多次。也用過不少方法去解決,
現簡單羅列出來,希望能給大家一點方向去決定合用的情況。
首先從persistence 層面出發,實際用過的方法有兩種:
A) 最直覺的方法:每個 node 存 parent 的 ID (就是之前文
章用的方法)
B) 每個 node 存的是 "左右" 兩數值, 類似:
http://www.sitepoint.com/hierarchical-data-database-2/
A) 最能對應 OOP,本身的資料就是差不多直接對映 hiererchy 的結構
e.g.
class Node {
Node parent;
List<Node> children;
}
實際轉換成 object 來操作的話,A 會比較容易和直覺
B) 對於一般的 DB (何謂非一般後面再解釋)來說,能輕易就
能用 SQL 取得某node 底下的 subtree, 或某 node 的 parents,
單純用 SQL 作 insert/delete 等也蠻簡單。但轉換成 object 操作
的話就不太能直接做到 (至少不能簡單利用 ORM 的內置 insert/update
功能)