Tag: 分层数据

在关系数据库中存储分层数据有哪些select?

良好的概述 一般来说,您正在快速读取时间(例如,嵌套集)或快速写入时间(邻接列表)之间作出决定。 通常你会得到最适合你需求的选项组合。 以下提供了一些深入阅读: 多一个嵌套间隔与邻接表比较 :我发现的邻接表,物化path,嵌套集和嵌套间隔的最佳比较 。 分级数据的模型 :幻灯片中有很好的权衡解释和示例用法 在MySQL中表示层次结构 :特别是对嵌套集的很好的概述 关系数据库系统中的分层数据 :我所见过的最全面和最有条理的链接集,但对解释的方式并不多 选项 我知道的一般特征: 邻接表 : 列:ID,ParentID 易于实施。 便宜的节点移动,插入和删除。 昂贵的查找水平(可以存储为一个计算列),祖先和后代(桥表与水平列结合可以解决),path(天堂列可以解决)。 在那些支持它们遍历的数据库中使用公用表expression式 。 嵌套集 (又名修改的预定树遍历) 由Joe Celko在许多文章和他的书中的树和层次结构在Smarties中被推广 列:左,右 便宜的水平,祖先,后代 易失性编码 – 移动,插入,删除更昂贵。 需要特定的sorting顺序(例如创build)。 因此,以不同的顺序sorting所有后代需要额外的工作。 嵌套间隔 像嵌套集,但与真正的/浮点数/小数,这样的编码是不稳定的(便宜的移动/插入/删除) 必须处理真正/浮点/小数表示问题 一个更复杂的matrix编码变体增加了祖先编码的好处,就像物化path“自由” 桥表 (又名Closure Table :关于如何使用触发器维护这种方法的一些好主意) 列:祖先,后裔 站在它描述的表格之外。 可以在一个以上的层次中包含一些节点。 廉价的祖先和后代(虽然不是以什么顺序) 对于层次结构的完整知识需要与另一个选项相结合。 平的桌子 邻接列表的修改,为每个logging添加级别和排名(例如sorting)列。 昂贵的移动和删除 廉价的祖先和后代 好用:线程讨论 – 论坛/博客评论 沿袭列 […]