【发布时间】:2023-03-14 01:45:02
【问题描述】:
我正在启动一个项目,并且正处于设计阶段:也就是说,我还没有决定要使用哪个数据库框架。我将编写创建类似“森林”结构的代码。也就是说,许多树,其中每棵树都是一个标准:节点和边。代码创建这些树后,我想将它们保存在数据库中。 (然后最终将它们拉出来)
在数据库中表示数据的简单方法是使用两个表的关系数据库:节点和边。也就是说,nodes 表会有一个node id,node 数据等。edges 表会是node id 到node id 的映射。
有没有更好的方法?或者鉴于我给出的(有限)假设这是最好的方法?如果我们添加一个树相对较小的假设 - 将整个树保存为数据库中的 blob 会更好吗?在这种情况下我应该使用哪种类型的数据库?请评论速度/可扩展性。
谢谢
【问题讨论】:
-
我也一直在考虑这个问题,我想存储当前节点的父节点数组。我尚未对其进行测试,但想知道这是否是最佳解决方案。
-
听起来您并没有将数据库用作数据库。通常,树用于完成一些其他抽象目标,例如创建集合或地图/字典。我认为您需要弄清楚您正在使用的抽象数据结构并询问如何将 that 映射到数据库。你在你的森林里储存了什么?
-
您需要支持什么样的查询?您可以使用邻接列表(您当前的想法)、嵌套集,甚至(在适当的数据库支持下)节点 ID 数组来表示从根开始的路径。您选择哪种表示形式取决于您需要对数据执行的操作。
-
@Kim,为什么是数组?如果图是一棵树,每个节点最多有一个父节点。
-
@svick,因此更容易根据祖先过滤子树。
标签: database data-structures tree hierarchical-data