问题标签 [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 回答
102 浏览

many-to-many - 如何在多对多桥表中允许孤立记录集

我有一个似乎无法解决的问题。我有表:软件和表:PC

它们之间有多对多的关系,即一台PC可以有很多软件,而一台软件可以有很多PC的链接表是:soft-pc

表 soft-pc 还具有许可信息,例如产品密钥。

现在的问题是,当从 PC 中删除软件时,该记录会从 soft-pc 表中删除。现在我希望能够将软件与 PC 取消关联,并且仍然将它们放在软 PC 表中。

那可能吗?

0 投票
1 回答
113 浏览

nhibernate - Is there a way to delete all foreign entities when i delete a record using NHibernate?

I recently began using Fluent Nhibernate for my data layer and have come across an issue. Whenever i want to delete a record that has multiple foreign key constraints, i have to create another class just to represent that database entity. That means that for something like a User record, which has relationships with many other tables, i have to create something like 10 different classes that i will never use for any other purpose. At least that is my understanding of how things work.

Is there a way for me to delete all of these records without having to map them. For instance, using the User example, a User can have multiple roles, departments, email addresses, phone numbers, addresses, and so on. I would like to delete all of these records, but not have to map all of them in Nhibernate classes.

Is there a property i can set on my UserMapping that would accomplish this?

Thanks!

0 投票
2 回答
837 浏览

sql - 是什么让这个数据库的级联删除具有周期性?

小贩

(PK) - ID
名称

站立

(PK) - Id
VendorId - fk - 如果 Vendor 被删除,则级联删除)
名称

物品

(PK) - Id
VendorId - (fk - 级联删除,如果供应商被删除)
名称
价格

不可用项目

(PK) - ItemId - (fk - 如果删除 Item 则级联删除)
(PK) - StandId - (fk - 如果删除 Stand 则级联删除)

上面的数据库代表一个运动场。

  • 存在多个供应商(Bob's Pizza、Tom's Tacos...)
  • 每个供应商都有多个摊位(Bob's Pizza Concourse A、Bob's Pizza Concourse B...)
  • 项目由供应商配置,因为所有代表特定供应商以相同的价格提供相同的项目
  • 展位可能会用完特定项目,因此 UnavailableItems 表记录了在给定展位上变得不可用的每个项目(使用 ItemId 和 StandId 的复合主键)

    问题:

    在添加最后一个列出的外键 (FK_UnavailableItem_StandId_Stand_Id) 和删除规则之前,我可以创建所有内容:级联

    SQL Compact 3.5(使用VS 2010 Server Explorer)报如下错误: 引用关系会导致循环引用,不允许。

    我了解如果我在 UnavailableItem 表中有一条记录,并且它的 Vendor 被删除,它将尝试被删除两次:

  • 一次是因为其引用的项目已被删除。
  • 曾经因为其引用的立场被删除。

    但是,这对我来说似乎不是周期性的。级联删除分支成两条路径(已删除的立场和已删除的项目),它们都以被删除的同一记录结尾......但它在那里结束。之后没有级联删除的无限循环。我是否遗漏了什么,或者这是我使用的工具的限制?

    感谢您提供任何帮助!

  • 0 投票
    1 回答
    369 浏览

    nhibernate - NHibernate 多对多和删除项目

    我在 Lists 和 ListItems 之间建立了多对多的关联:List 知道它的 Items,但 ListItem 不知道包含的列表。级联是saveupdate。

    因此,每当我尝试删除 ListItem 实体时,我都会收到一个 SQLException 说我正在破坏参照完整性。NHibernate 尝试删除我的 ListItem 而不删除链接表中的相应行。问题是,是否可以指示 NHibernate 在不破坏参照完整性的情况下删除我的 ListItem?

    如果我必须从所有包含列表中手动删除该项目,我该如何正确地做到这一点?

    非常感谢您的任何建议。

    乌鲁

    0 投票
    1 回答
    1596 浏览

    hibernate - 休眠级联与手动删除

    我正在使用 Hibernate,有几次不得不实现从父对象到其子对象的级联 DELETE 操作。我使用了以下两个选项。

    一种选择是在父对象上公开 getChildren(),将子对象添加到返回的子对象集合中,并允许 Hibernate 自动级联 DELETE。此选项的缺点是 getChildren() 集合需要公开,即使它仅用于支持 Hibernate 级联。

    另一种选择是在 ParentDao.delete(parent) 中手动查找和删除子项。此选项的缺点是更多自定义代码。但是,如果它使用批量删除语句,此选项可能会执行得更好。

    你主要使用什么方法?你看到其他的优点和缺点吗?

    0 投票
    2 回答
    704 浏览

    database - 跟进 [delete (cascade/restrict)] 和 Update (cascade/restrict)

    我想知道何时实际使用删除级联或删除限制以及更新级联或更新限制。我很困惑使用它们或在我的数据库中应用。

    0 投票
    4 回答
    27866 浏览

    django - Django - ManyToManyRelation 中的级联删除

    使用以下相关模型(一个博​​客条目可以有多个修订版):

    BlogEntryRevision当相应的被删除时,我如何告诉 Django 删除所有相关的BlogEntry?如果“另一方”的对象被删除,默认值似乎是使对象保持多对多关系。有什么方法可以做到这一点 - 最好不要覆盖BlogEntry.delete

    0 投票
    1 回答
    459 浏览

    sql - 级联删除的 SQL 输出

    是否可以从 SQL 中的级联删除中输出值?

    就像是:

    如果有两个家庭共有三个成员,它应该产生类似的结果:

    对于每个族产生 1 行的解决方案也是可以接受的,其中级联删除的成员位于分隔列表中。就像是:

    0 投票
    1 回答
    115 浏览

    iphone - 限制删除引用的托管对象

    我有一个简单的核心数据模型:

    Entity Team (name, logo) Entity Sport (name, teams to->many Teams)

    因此,一项运动可以有多个团队

    我首先创建团队,然后添加或编辑一项运动并添加团队。如果我删除团队,我的应用程序开始崩溃。我相信是因为它正在寻找已删除的参考。

    那么,我如何通过核心数据进行限制,而不是删除一个被用作另一个实体关系的引用的实体。

    我不想将关系设置为零。而且我不想先从 Sport 中删除 Team,然后再单独删除它。我只是想让它通知我不能删除它。即我正在寻找一个内置的检查器。

    0 投票
    1 回答
    189 浏览

    c++ - 通过观察者调用外部逻辑时如何保护数据结构的一致性?

    我目前正在重构一个应用程序,如果它们的状态发生变化,类可以在其中调用观察者。这意味着无论何时都会调用观察者:

    • 类更改的实例中的数据
    • 创建类的新实例
    • 类的实例被删除

    正是这最后一个案例让我担心。

    假设我的班级是 Book。观察者存储在一个名为 BookManager 的类中(BookManager 还保存所有书籍的列表)。这意味着我们有这个:

    如果一本书被删除(从列表中删除并从内存中删除),则调用观察者:

    问题是我无法控制观察者的逻辑。观察者可以通过插件或客户开发人员编写的代码来交付。

    因此,尽管我可以编写这样的代码(并且我确保在删除实例的情况下获得列表中的下一个):

    观察者总是有可能从列表中删除其他书籍:

    在这种情况下,如果列表包含托尔金的书,然后是卡尔萨根的书,则删除所有托尔金书的循环可能会崩溃,因为下一个迭代器 (itNext) 已无效。

    图示的问题也可能出现在其他情况下,但删除问题是最严重的,因为它很容易使应用程序崩溃。

    我可以通过确保在应用程序中首先获取我想要删除的所有实例,将它们放入第二个容器中,然后遍历第二个容器并删除实例来解决这个问题,但由于总是存在观察者显式删除了已经在我的待删除列表中的其他实例,我必须放置显式观察者以使第二个副本也保持最新。

    还要求所有应用程序代码在调用观察者(直接或间接)时在容器上迭代时复制列表,这使得编写应用程序代码变得更加困难。

    是否有 [设计] 模式可用于解决此类问题?最好不要使用共享指针方法,因为我不能保证整个应用程序都使用共享指针来访问实例。