树数据结构的数据库结构是什么?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (55)

在数据库中实现可定制的(即具有未知级别的树结构)数据结构的最佳方法是什么?

提问于
用户回答回答于

最常用的,即邻接列表:blogs.msdn.microsoft.com/mvpawardprogram/2012/06/25/hierarchies-convert-adjacency-list-to-nested-sets

还有其他模型,包括物化路径和嵌套集合:communities.bmc.com/communities/docs/DOC-9902

选择模型时需要考虑的主要因素是:

1)结构变化的频率 - 树的实际结构变化的频率。某些型号提供更好的结构更新特性。但是,将结构更改与其他数据更改分开很重要。例如,你可能想要模拟公司的组织结构图。有些人会将此模型作为邻接列表进行建模,使用员工ID将员工链接到其主管。这通常是次优方法。通常更好的方法是将组织结构建模与员工本身分开,并将员工作为结构的属性进行维护。这样,当员工离开公司时,组织结构本身不需要改变,只需要与离开的员工建立联系。

2)树是重写还是重读 - 在读取结构时,某些结构工作得很好,但在写入结构时会产生额外的开销。

3)需要从结构中获得哪些类型的信息 - 某些结构擅长提供有关结构的某些类型的信息。例子包括查找节点及其所有子节点,查找节点及其所有父节点,查找满足特定条件的子节点的数量等。你需要知道将从结构中需要哪些信息来确定最适合的结构的需求。

用户回答回答于

看看MySQL管理分层数据。它讨论了在关系数据库中存储和管理分层(树状)数据的两种方法。

第一种方法是邻接列表模型,这就是你基本描述的内容:具有引用表本身的外键。虽然这种方法很简单,但对于某些查询(如构建整棵树)可能效率很低。

本文讨论的第二种方法是嵌套集模型。这种方法更加高效和灵活。

扫码关注云+社区