我有一个由一组对象组成的数据结构,这些对象被排列成一个多重链接列表,该列表也(同构地)是一个有效的DAG。它可以被视为一个单一的多重链接列表,也可以被视为一系列可以共享成员的 n 双向链接列表。 (对于那些关注我的问题,这与Algorithm for quickly obtaining a partial ordering over multiple linked lists的数据结构相同。)
我正在寻找一种通用技术,在没有特定的SQL方言中,用于在SQL中表达这个多重链接列表/ DAG,这样就可以很容易地获取给定节点并获得:
使用其他问题的示例数据:
first = [a, b, d, f, h, i];
second = [a, b, c, f, g, i];
third = [a, e, f, g, h, i];
我希望能够在给定节点f
的情况下,从整个DAG拓扑中获取[(c|d|e), g]
,并从每个列表排序中获取{first: [d, h], second: [c, g], third: [e, g]}
。
这是有趣的部分: n ,双向链接列表的数量,不固定,可能随时增长。每次发生时我都不想重做架构。
到目前为止,我提出的所有算法要么(a)将大量的泡菜填入数据库并将其拉出以计算排序,或者(b)要求将列表显式枚举为递归关系在DB中。
如果我找不到更好的东西,我会选择(b)中的选项,但我希望有一些神奇的东西让这更容易。
答案 0 :(得分:0)
预: 这是一个问答论坛,而不是“让我们坐下来,小组思考一下,解决整个问题”论坛。
我认为你想要研究一种名为'修改的预订树遍历'的技术,我知道,但是它允许将分层数据存储在平面数据库和个体内容中。遗憾的是,您必须对插入进行一些重写,但选择可以在单个查询中完成,因此最适合“很多视图/很少更改”的情况,例如网站。幸运的是,您很少需要重写整个数据集(仅更改您更改的部分以及之后的层次结构。
我记得一篇关于基础知识的文章很好(几年前),但找不到书签atm,所以从谷歌搜索开始。
EDIT / UPDATE:
link:http://www.sitepoint.com/hierarchical-data-database/
无论如何,从广泛处理这个问题开始,你必须选择在工作中,在视野中或在变化上首当其冲。根据“主”树的大小,您可能(像我一样)决定将树分成几部分并使用树木树,限制更新成本。