【问题标题】:Determine the CASCADE DELETE paths that prevent the addition of a new cascade delete确定阻止添加新的级联删除的 CASCADE DELETE 路径
【发布时间】:2016-11-16 08:45:09
【问题描述】:

我的 SQL 数据库中有许多表,其中包含大量使用级联删除的外键关系。我已经确定现有关系现在需要级联删除。尝试启用此功能会提供有用的信息:

Unable to create relationship Introducing FOREIGN KEY constraint on table may cause cycles or multiple cascade paths. Specify ON DELETE NO ACTION or ON UPDATE NO ACTION, or modify other FOREIGN KEY constraints. Could not create constraint. See previous errors.

但是,它没有提到通过该组表会导致创建循环关系的其他路径;它只是通过说:

modify other FOREIGN KEY constraints

我不想在实体框架中进行更改,因为我们正在以模型为先。

如何查看相关的竞争外键关系?

【问题讨论】:

  • 在删除触发器中手动实现级联删除可能是一种解决方法。因为谁在乎它是否是循环的,最终它不能删除比数据库中更多的数据。但是,如果循环太深,可能会很慢。
  • 我不需要遭受触发器的性能影响。我需要确定有助于循环关系的外键,以便确定性地调整它们以避免问题。

标签: sql sql-server tsql sql-server-2012


【解决方案1】:

它没有躲避任何东西。假设您在某处有类似于实体关系 (ER) 图的东西,新来者可以立即掌握外键关系以及它们为何如此。

如您所说,您是否在“模型优先”工作,在您已经(显然)构建某些东西之后,您不会发现您必须“在中途换马”。 (这就是 CREATE TABLE 对我说的:你建立了一些东西。)

【讨论】:

  • 我们确实有一个 ER 图,尽管它只是数据库表的一个非常小的子集。您是否建议通过 edmx 文件添加导航属性会告诉我哪些导航属性及其表是循环关系的原因?这是与此问题相关的关键信息。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-14
  • 1970-01-01
  • 2013-10-11
相关资源
最近更新 更多