概述
邻接表
通用设计父级id字段
路径枚举
设计祖级列表字段,所谓祖级列表就是当前节点的所有父级节点的id集
路径枚举实现递归查询当前节点下所有字节点方案:
1:MySQL find_in_set函数 与 in 结合使用
2:若做数据库兼容则可使用like替代find_in_set
嵌套集
嵌套集解决方案是存储子孙节点的相关信息,而不是节点的直接祖先。我们使用两个数字来编码每个节点,从而表示这一信息,可以将这两个数字称为nsleft 和 nsright。
每个节点通过如下的方式确定nsleft 和nsright 的值:nsleft的数值小于该节点所有后代ID,同时nsright 的值大于该节点的所有后代的ID。这些数字和comment_id 的值并没有任何关联。
确定这三个值(nsleft,comment_id,nsright)的简单方法是对树进行一次深度优先遍历,在逐层深入的过程中依次递增地分配nsleft的值,并在返回时依次递增地分配nsright的值。
闭包表
闭包表是解决分级存储的一个简单而优雅的解决方案,它记录了树中所有节点间的关系,而不仅仅只有那些直接的父子节点。
在设计评论系统时,我们额外创建了一个叫 tree_paths 表,它包含两列,每一列都指向 comments 中的外键。
我们不再使用comments 表存储树的结构,而是将树中任何具有(祖先 一 后代)关系的节点对都存储在treepaths 表里,即使这两个节点之间不是直接的父子关系;同时,我们还增加一行指向节点自己通过treepaths 表来获取祖先和后代比使用嵌套集更加的直接
综上所述结合树的深度可以划分:
普通树结构:邻接表与路径枚举结合使用
树深度未知:闭包表
查询多少:嵌套集
最后
以上就是勤恳镜子为你收集整理的数据库设计:邻接表、路径枚举、嵌套集、闭包表邻接表路径枚举嵌套集闭包表的全部内容,希望文章能够帮你解决数据库设计:邻接表、路径枚举、嵌套集、闭包表邻接表路径枚举嵌套集闭包表所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复