Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typo3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用SQL表示多重链表_Sql_Sqlalchemy - Fatal编程技术网

用SQL表示多重链表

用SQL表示多重链表,sql,sqlalchemy,Sql,Sqlalchemy,我有一个由一组对象组成的数据结构,这些对象被排列成一个多重链表,这个链表也是(同构的)一个有效的DAG。它可以被看作是一个单倍链表,或者是一系列可能共享成员的n个双倍链表。(这是来自的相同数据结构,对于那些回答我问题的人来说。) 我正在寻找一种通用技术,不使用特定的SQL方言,用于在SQL中表达这个多重链表/DAG,这样就可以很容易地获取给定节点并获得: 给定DAG的拓扑顺序,DAG中的上一个和下一个链接 此节点所属的每个双链接列表中的上一个链接和下一个链接 使用另一个问题的示例数据: fi

我有一个由一组对象组成的数据结构,这些对象被排列成一个多重链表,这个链表也是(同构的)一个有效的DAG。它可以被看作是一个单倍链表,或者是一系列可能共享成员的n个双倍链表。(这是来自的相同数据结构,对于那些回答我问题的人来说。)

我正在寻找一种通用技术,不使用特定的SQL方言,用于在SQL中表达这个多重链表/DAG,这样就可以很容易地获取给定节点并获得:

  • 给定DAG的拓扑顺序,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)将一个大的pickle塞进数据库并将其取出以计算排序,要么(b)要求列表在数据库中显式地作为递归关系枚举

如果我找不到更好的,我会选择(b)中的选项,但我希望有神奇的东西可以让这更容易。

Pre: 这是一个问答论坛,而不是“让我们坐下来,集体思考,解决整个问题”论坛

我想你想研究一种叫做“修改的预排序树遍历”的技术,我知道很多,但它允许在平面数据库和单个实体中存储分层数据。遗憾的是,您确实需要对insert进行一些重写,但选择可以在单个查询中完成,因此对于“多视图/很少更改”的情况(如网站)来说,这是最好的选择。幸运的是,您很少需要重写整个数据集(只需更改部分以及更改后的层次结构)

我记得(几年前)有一篇关于它的基础知识的好文章,但是找不到书签atm,所以从谷歌搜索开始

编辑/更新:

链接:

不管怎样,从广泛处理这个问题开始,您必须选择是将工作的主要影响放在视图上,还是放在更改上。根据“主”树的大小,您可能(和我一样)决定将树分解为多个部分并使用一棵树,以限制更新成本。

Pre: 这是一个问答论坛,而不是“让我们坐下来,集体思考,解决整个问题”论坛

我知道你想研究一种叫做“修改的预排序树遍历”的技术,但它允许在平面数据库和单个实体中存储分层数据。遗憾的是,你确实需要对插入进行一些重写,但选择可以在单个查询中完成,所以最好是“多视图/少量更改”幸运的是,你几乎不必重写整个数据集(只需修改部分以及修改后的层次结构)

我记得(几年前)有一篇关于它的基础知识的好文章,但是找不到书签atm,所以从谷歌搜索开始

编辑/更新:

链接:

不管怎样,从广泛处理这个问题开始,您必须选择是将工作的主要影响放在视图上,还是放在更改上。根据“主”树的大小,您可能(和我一样)决定将树分解为多个部分,并使用一棵树,以限制更新成本。

我可以问,“给定一个具有多个sentinel节点的多重链接列表,我如何有效地存储它,以便检索传入链接、传出链接和拓扑排序的邻居相对较快?“我发现,当大局能够降低试图提供帮助的人们的准确性和相关性,以及帮助他们更早地发现XY问题时,Q&A并没有帮助。感谢链接,现在阅读::3I本来可以问,“给定一个具有多个sentinel节点的多重链接列表,我如何有效地存储它,以便检索传入链接、传出链接和拓扑排序的邻居相对较快?“我发现,当大的图景可以减轻试图提供帮助的人的准确性和相关性,以及帮助更早地发现XY问题时,Q&A没有帮助。感谢链接,现在阅读::3