013. 嵌套集合模型(无限极分类)——kalnoy/nestedset(代替 baum/baum)
嵌套集合模型——kalnoy/nestedset
日常开发中你一定会遇到关于无限极分类相关的功能,通常情况下我们会使用递归来实现无限极分类,譬如增加一个 parent_id
的字段,来表示数据之间的父子关系,这种模型关系很简单,但是会带来一些问题:
- 当需要知道两个节点的层级关系时,无法直接得出,需要递归获取并对比两个节点的父节点;
- 需要通过递归的方式获取数据,会有效率问题;
- 同一层级的两个节点之间没有先后关系,需要引入额外的字段进行排序。
为了解决上述问题,我们可以使用嵌套集合模型(Nested set model) ,它是一种在关系型数据库中表示嵌套集合的特殊技术。它会根据树遍历来对节点进行编号,遍历会访问每个节点两次,按访问顺序分配数字,并在两次访问中都分配。这将为每个节点留下两个数字,它们作为节点两个属性存储。这使得查询变得高效:通过比较这些数字来获得层级结构关系。当然查询效率提升的代价就是,更新数据需要给节点重新分配数字,因此在更新时会变得低...