类似的情况在实务上有遇过很多次。也用过不少方法去解决,
现简单罗列出来,希望能给大家一点方向去决定合用的情况。
首先从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
功能)