我是靠谱客的博主 勤恳镜子,最近开发中收集的这篇文章主要介绍数据库设计:邻接表、路径枚举、嵌套集、闭包表邻接表路径枚举嵌套集闭包表,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

邻接表

通用设计父级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 表来获取祖先和后代比使用嵌套集更加的直接

综上所述结合树的深度可以划分:

普通树结构:邻接表与路径枚举结合使用

树深度未知:闭包表

查询多少:嵌套集

最后

以上就是勤恳镜子为你收集整理的数据库设计:邻接表、路径枚举、嵌套集、闭包表邻接表路径枚举嵌套集闭包表的全部内容,希望文章能够帮你解决数据库设计:邻接表、路径枚举、嵌套集、闭包表邻接表路径枚举嵌套集闭包表所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(48)

评论列表共有 0 条评论

立即
投稿
返回
顶部