【发布时间】:2011-02-20 11:14:41
【问题描述】:
我在一个数据库中有一个邻接列表,它带有 ID 和 ParentID 来表示树结构:
-a
--b
---c
-d
--e
当然,在记录中,ParentID 绝不应该与 ID 相同,但我还必须防止循环引用以防止无限循环。这些循环引用理论上可能涉及超过 2 条记录。 (a->b、b->c、c->a 等)
对于每条记录,我将路径存储在一个字符串列中,如下所示:
a a
b a/b
c a/b/c
d d
e d/e
我现在的问题是: 在插入/更新时,有没有办法检查是否会发生循环引用?
我应该补充一点,我对嵌套集合模型等都很了解。我选择了存储路径的邻接方法,因为我发现它更直观。我让它与触发器和一个单独的路径表一起工作,它就像一个魅力,除了可能的循环引用。
【问题讨论】:
-
我现在解决了这个问题,方法是跟踪递归路径循环中使用的 ID。当它看到一个已经使用过的 ID 时,它会插入“NULL”而不是 ID。也许不是很优雅,但它似乎工作......
标签: sql mysql circular-reference adjacency-list