0

给定一个包含表 Foo 的数据库。Foo 与其他几个表有子关系,而这些表又与更多的表有子关系。简而言之,Foo 具有第 n 级的子关系。

现在假设我们要从 Foo 中删除一条记录。在我们这样做之前,我们必须确定删除所有子(孙子等)记录的最佳策略,以避免因外键约束而绊倒。

有没有一种工具可以提供我的数据库模式,告诉它​​我想删除一条 Foo 记录,它会为我计算最佳删除策略?所以我可以采用这个策略并在我的业务逻辑中实现它。

详细说明:正如评论中提到的 CASCADE DELETE 将非常适合上述情况。但是,我忽略了说 Foo 通过多条路径连接到它的一些后代。这使得级联不是一个选项,至少对于 MS SQL Server。我们使用的 ORM 是 LINQ to SQL,它也不支持级联场景。所以我们遇到了这样一种情况,即从 Foo 及其所有后代中删除一条记录的顺序不是很明显,以及哪种顺序是最佳的。这需要一些令人费解的地方,而 Foo 当然不是唯一需要这样做的表:-) 因此,我的问题是是否有工具可以为我分析这个。

4

1 回答 1

1

要以算法方式回答您的问题(与告诉您一个可以执行此操作的工具相比),您需要进行拓扑排序:http ://en.wikipedia.org/wiki/Topological_sorting

最佳算法是 O(|E|+|V|) - 其中边 E 是子引用数,顶点 V 是记录数。(如果您想假设所有子引用都存在,您可能会说顶点实际上是一个表)

然后,拓扑排序将为您提供要删除的记录的顺序(或表的顺序)。

于 2013-05-16T09:52:51.457 回答