我试图确定是否可以在 SQL 中轻松地使用闭包表(和/或可能的其他帮助表)对有向循环图进行建模。例如,假设我有这个有向图(全部向下):
我在用闭包表建模时遇到了问题。
我们会得到这张表:
移除 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 是否根本不是这种类型图形的一个好的选择。