我正在尝试确定是否可以使用 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;
第一个删除查询删除了 1 和 4 以及 3 和 4 之间的路径,这些路径不应该被删除
我无法使用闭包表找到解决方案,如果 4 指向 1,它会变得更加复杂。(变得循环)。
我还没有找到很多关于这个主题的文章。对于如何在 SQL 中实现这种类型的图,或者如果 SQL 根本不是这种类型的图的好选择,我将不胜感激。