Guy*_*Guy 30 database tree hierarchical-data data-structures
我正在开始一个项目,我正处于设计阶段:即,我还没有决定我将使用哪个db框架.我将拥有创建"森林"结构的代码.也就是说,许多树,每棵树都是标准的:节点和边.在代码创建这些树之后,我想将它们保存在db中.(然后最终将它们拉出来)
在db中表示数据的天真方法是具有两个表的关系数据库:节点和边.也就是说,节点表将具有节点id,节点数据等.而边表将是节点id到节点id的映射.
有更好的方法吗?或者给出(有限的)假设我给出的这是最好的方法?如果我们添加树相对较小的假设怎么样 - 将整个树保存为db中的blob会更好吗?在这种情况下我应该使用哪种类型的数据库?请评论速度/可扩展性.
谢谢
Bil*_*win 20
在我对StackOverflow问题的回答中,我展示了一个类似于你的节点和边缘表的解决方案:将平面表解析成树的最有效/优雅的方法是什么? 我将此解决方案称为"闭包表".
我做了一个关于在SQL中存储和使用树的不同方法的演示文稿,使用SQL和PHP的分层数据模型.我用正确的索引证明了(根据你需要运行的查询),Closure Table设计可以有很好的性能,即使是大量的边缘集合(在我的演示中大约500K边缘).
我还介绍了我的书中的设计,SQL Antipatterns:避免数据库编程的陷阱.