一般比较普遍的就是四种方法:(具体见 SQL Anti-patterns这本书)
- 邻接表(Adjacency List):每一条记录存parent_id,设计实现简单,但是查询子树复杂。
- 枚举路径(Path Enumerations):每一条记录存整个tree path经过的node枚举,增删改查都较简单,查需要使用like,不能无限扩展。
- 嵌套表(Nested Sets):每一条记录存 nleft 和 nright,不直观,设计实现都非常复杂。
- 闭包表(Closure Table):维护一个表,所有的tree path作为记录进行保存。比较折中的一种设计。