小编mat*_*man的帖子

SQL中带闭包表的有向循环图

我试图确定是否可以在 SQL 中轻松地使用闭包表(和/或可能的其他帮助表)对有向循环图进行建模。例如,假设我有这个有向图(全部向下):

在此处输入图片说明 我在用闭包表建模时遇到了问题。

我们会得到这张表:

  • (祖先,后代,路径长度)
  • (1, 1, 0)
  • (2, 2, 0)
  • (3, 3, 0)
  • (4, 4, 0)
  • (2, 4, 1)
  • (3, 4, 1)
  • (1, 4, 2)

移除 1 和 2 之间的边时,闭合表会损坏。

DELETE FROM closure WHERE descendant IN 
(SELECT descendant FROM closure WHERE ancestor=2);

DELETE FROM closure WHERE descendant=2 AND ancestor=1;
Run Code Online (Sandbox Code Playgroud)

第一个删除查询删除了 1 到 4、3 和 4 之间的路径,这些路径不应被删除

我无法通过闭包表找到解决方案,如果 4 指向 1,则情况会变得更加复杂。(变成循环)。

我一直没能找到很多关于这个主题的文章。我很感激有关如何在 SQL 中实现这种类型的图形的任何输入,或者 SQL 是否根本不是这种类型图形的一个好的选择。

mysql sql transitive-closure-table

5
推荐指数
1
解决办法
772
查看次数

标签 统计

mysql ×1

sql ×1

transitive-closure-table ×1