database - 无环有向图祖先的高效数据库查询

标签 database algorithm graph family-tree

假设我有一个无环有向图,例如家庭“树”(不是真正的树,因为 child 有 2 个 parent )。我想将此图的表示形式放入关系 数据库中,以便快速计算节点的所有祖先和节点的所有后代。你会如何表示这个图表?您将如何查询所有后代?您将如何插入和删除节点和关系?您对数据做出了哪些假设?

最佳解决方案将拥有最佳的大 O,用于查询祖先和后代的 select/insert/delete 语句的数量,与总运行时间的最佳大 O 打破了联系,有联系因空间要求而中断。

我的同事向我提出了这个问题。我有一个解决方案,但在最坏的情况下它的大小呈指数增长,所以我想看看其他人会如何解决它。

编辑

阐明了关系数据库。如果您使用带有内置传递闭包的图形数据库,这个问题很简单(而且很无聊)。

最佳答案

如果选择 > 操作,尤其是子树选择(所有祖先,所有后代)我会选择Closure -表方法。是的,路径表中的路径呈爆炸式增长,但它确实可以快速提供结果(与邻接模型相反),并将更新限制在相关部分(与嵌套集的 50% 更新相反)。

Bill Karwin 在网上有一些关于不同模型优缺点的精彩演讲,请参阅 http://www.slideshare.net/billkarwin/models-for-hierarchical-data (幻灯片 48 是概述)。

关于database - 无环有向图祖先的高效数据库查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3755439/

相关文章:

algorithm - 集合覆盖的近似

python - 如何使用 networkx + python 枚举图中所有*最大*派系?

python - 如何遍历具有特定属性的树

mysql - 我有一个具有挑战性的 MySQL SELECT 查询,涉及库存和阈值边界

java - 在 QueryDSL 分组转换器中计数

r - 在 igraph 中查找顶点的第 n 级邻居

algorithm - 在多边形中找到成本最低的路径

c++ - 查询完整的有向图,判断上下游关系和距离

mysql - 如何在 MySQL 中实现时态数据

mysql - 获得具有多个约束的总和。在一个sql文件中