问题标签 [cascading-deletes]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
149 浏览

sql - 处理具有多个后代级别的数据库记录删除

我们有一个通常具有以下结构的数据库:

儿童/兄弟姐妹(第二代,如果你愿意的话):

孙子(第三代):

并非第二代的每张桌子都有孩子。应用程序中存在受限的删除功能(您可以删除任何单个记录,但 FK 在许多情况下会阻止删除;删除功能很糟糕,并且不会优雅地失败)。

我的任务是调查处理删除的最佳方法。为了清除从大师到孙子的整个记录​​,后端是唯一的方法。这让 The Powers That Be 很高兴。但是,你知道,用户撒谎,所以事实证明我们可能需要改变这一点(这样我就不必偶尔充当官方记录删除者,而且因为有某些类型的 Gen 2 记录用户经常删除。

Cascading Deletes were the first option, because TPTB would prefer this not require work on a new build of the app. And because it's what popped out of my bosses' mouth at the end of that particular meeting. My Gen 2 -> Gen 3 cascades are all working fine (and this covers the most frequent Use Case/Story/What Have You). I then updated all the Master -> Gen 2 Foreign Keys to cascade on Delete. In hoped this would allow a deletion of the master record and that all other kids and grand kids would go with it. No good; I get an error message violating the first Master -> Gen 2 FK to come up when I try to delete the master record. I've double checked; FKs are set to cascade on delete.

What am I not understanding about cascading deletes with more than 1 level of table relationships? I'm reading as much as I can (as time permits) but I haven't yet discovered the knowledge that will lead me out of this dark time. Is cascading the wrong approach?

Secondly, there are two other options as I see it:

  1. Do all deletion in the app. Not preferred, but if it's the only option it's the only option. I know there are arguments that it's the best option, but TPTB have different views of best than I do (and while they're all batshit crazy, they sign the checks).

  2. Handle deletes via trigger? I'm unclear if Foreign Keys will get inthe way of this, but it occured to me this might be an option.

Well, also:

  1. Do the Gen 2 -> Gen 3 cascading. And then the few people with delete permissions will just have to follow the rituals to do full deleting (that would be: delete all Gen 2 records individually, then delete the master). Or, I'll be stuck as Official Record Deleter.
0 投票
2 回答
6434 浏览

grails - Grails - 具有级联删除的同一类的多个belongsTo

这是给 Grails 用户的。我在 grails - user mailing list 上问过它,但我想既然我已经为此奋斗了几天,我应该尽可能广泛地撒网。

我在尝试在引用这两个对象的另一个对象(不同类型)中对相同类型的两个对象之间的关系进行建模时遇到了一些困难。

作为我正在尝试做的一个示例,假设您正在模拟家庭成员之间的关系。任何给定的关系“属于”两个不同的家庭成员。所以:

这里的意图是如果 p1 或 p2 被删除,则删除将级联到 hasMany 映射中的所有关系对象。相反,每次我尝试它时,我都会遇到外键违规。我尝试使用文档中介绍的“级联”属性:

http://grails.org/doc/1.0.x/guide/single.html#5.5.2.9%20Custom%20Cascade%20Behaviour

所以我想我会把它添加到 Person 类中:

我也没有运气。

我还查看了 Grails 生成的 devDB.script 文件,以了解它是如何在关系上设置外键的。如果我手动将“ON DELETE CASCADE”添加到两个外键约束,那么它工作正常,但显然对自动生成的数据库脚本进行手动编辑并不是最强大的解决方案。理想情况下,我希望能够使用 GORM 指定该行为。

那么我在这里最好的选择是什么?有没有办法强制级联删除多个外键/所有者?我是否需要通过对 Person 的 onDelete 操作手动执行此操作?我是否需要为此进入 Hibernate 配置,或者我可以在 Grails/GORM 中以某种方式做到这一点?

非常感谢您抽出宝贵的时间以及您可以提供的任何帮助。

0 投票
3 回答
14930 浏览

sql-server - 如何在多对多表上级联删除

我有 3 个如下所示的表:( 来源:InsomniacGeek.com

在外键上我设置了级联删除。现在,当我删除 Folder 表中的一条记录时,只会删除 FolderItem 中的相关记录。

这是预期的和正确的。

我要做的是当我删除Folder表中的一条记录时,FolderItem和Item表中的相应记录应该被删除。

我该如何解决这个问题?通过添加一个触发器来删除所有具有相关 FolderID 的 Item 实例?或者有没有更好的解决方案?

0 投票
2 回答
7152 浏览

ruby-on-rails - 如何在 Rails ActiveRecord 中的 one_to_many 关系中进行级联删除?

我在 Rails 中有一个具有 one_to_many 关系的模型。当我删除父亲时,我想删除所有孩子。我该怎么做?我想在删除用户时删除所有订单及其商品

我的模型是:

0 投票
2 回答
1535 浏览

php - MySQL中如何实现分层数据的级联删除?

我正在开发一个具有类别/子类别的项目。用于此的数据库表是唯一的,具有以下结构:

因此,如果类别是“基本”类别,则 parent_id 为零,如果类别有父类别,则它会聚集父 ID。我想知道的是:在选择该选项时,我需要删除上面所有与类别相关的所有内容,类似级联的删除,但我只有这个表(没有外键)。我怎么做?(没有大量的查询。)

0 投票
3 回答
3900 浏览

sql - sql server、级联删除和父/子表

我有一个包含以下列的简单表:id、name 和 parentID

我在同一张表上创建了idparentID之间的关系图(在同一张表上),就像简单的树一样,但是当我尝试用户级联删除时,它对我来说被禁用了

我知道如果我要删除父级它将是递归删除它会删除他的孩子

我有什么选项可以在没有触发器的情况下进行级联删除吗?

0 投票
8 回答
9698 浏览

core-data - 核心数据关系在删除后导致保存错误

这个问题可能是一个很长的问题。删除实体后保存时,我无法弄清楚我在核心数据项目中遇到的错误。

我有两个主要的实体,一个服装和一个文章。我可以毫无问题地创建它们,但是当我删除它们时,我得到以下错误日志:

对于服装:

如果我删除一篇文章,我会得到:

1600 错误是:

NSValidationRelationshipDeniedDeleteError表示 与删除规则 NSDeleteRuleDeny 的
某些关系的错误代码 是非空的。

适用于 Mac OS X v10.4 及更高版本。

在 CoreDataErrors.h 中声明。

但我一辈子都看不到哪种关系会阻止删除。如果某些 Core Data 向导可以看到我的方法的错误,我会感到谦卑。

我无法将此标记为已解决,因为我并没有真正解决它,但我确实有一个解决方法。在.m我的每个managedObjects我添加了一个看起来像这样的方法:

所以你可以看到,首先我手动清除了关系,然后我让对象自己删除。在其他对象中nil-ing,我的 delete 方法在某些对象关系上调用,而不是 ,以获得级联。

0 投票
1 回答
12959 浏览

hibernate - 删除和删除有什么区别?

有没有区别:

  • @Cascade(org.hibernate.annotations.CascadeType.REMOVE) 和
  • @Cascade(org.hibernate.annotations.CascadeType.DELETE)?
0 投票
3 回答
116 浏览

sql - DB 在执行删除查询时关闭

一个简单的删除查询是否有可能导致数据库崩溃?

我们执行了一个删除查询(单行删除)并且该查询挂起。当多人尝试再次执行相同的删除时,Oracle DB 已关闭。多个表引用此表并且未使用级联删除。应该使用级联删除吗?

数据库停止执行此 sql 的可能原因是什么?

0 投票
1 回答
868 浏览

nhibernate - 使用nhibernate级联删除多个级别?

我有一个 3 级深的表层次结构(QualificaionType 有许多 QualificationGroups,它们有许多 Qualifications)映射如下:

当我删除一个资格组时,它会删除与其相关的所有资格。但是当我尝试删除资格类型时,它会尝试删除所有相关的资格组,但不会删除它们的资格。

我怎样才能让它一直向下级联,以便如果我删除一个类型,它会删除所有组及其所有资格?我是否需要先遍历所有组并删除它们?看来这应该能够仅通过映射来处理。

仅供参考,我正在使用 Fluent NHibernate 1.0RTM 和 NHibernate 2.1