了解一对多的核心数据删除规则

Understanding Core Data delete rules on One to Many

我对核心数据关系删除规则有点模糊。所以如果有人能帮我回答一些关于他们的问题。

我有实体 A 和 B。A 与 B 是一对多关系,B 与 A 是一对一关系。

A<--->>B

现在,如果我将A处的删除规则设置为Cascade,我理解它将删除与其相关的所有B。但是,如果我将其设置为 Nullify,它会将 B 设置为 NIL 还是仅将外键设置为 Nil?

而且我到处都看了B到A的关系,是不是应该设置为Nullify?那只会使 A 处的 "B Object" 无效吗?或者它将使与 A 关联的所有 B 无效?级联呢?它会删除与 A 关联的所有 B,还是只删除特定的 B?

或者我只是在 B 到 A 的关系上使用 "No Action" 这样当我删除 B 时,A 不会发生任何变化,但对 B 的引用将不存在?

我对这些很困惑,所以请原谅我的问题。

谢谢。

如果您将删除规则设置为 "nullify" 并删除 A 对象,那么 B 中对该对象的引用将被删除。反之亦然。如果您有级联并删除 B,那么它将删除 B 指向的 A。然后它将遵循从 A 到其余 B 的删除规则(级联或无效)。

您设置的规则实际上取决于您的数据模型。如果 A 是客户,B 是他们的订单,那么您可以将 A->B 规则设置为拒绝(如果客户有订单,则防止删除 A)或级联(删除客户时删除订单)。 B->A 规则可能是 "nullify"。如果删除订单,只需从客户那里删除对该订单的引用。

关系删除规则在Apple Core Data Programming Guide

中描述

如果设置"nullify"并删除A的对象,则只会删除A的对象和后台关系,不会删除B的对象。

例如:客户实体与订单有 nullify 关系。如果您从客户实体中删除客户,它只会从 order 中删除客户及其后台关系。它不会删除客户的订单

但如果关系是 "cascade",它将删除客户及其订单。

如果是 "deny"。如果客户有任何订单,它不会删除甚至删除客户。

使用删除规则进行更深入的解释和可视化。


假设我们有 table 个人和工作的数据库。一个人可以有很多任务要做。

Sample data and ER relationship


删除规则说明

  1. 无操作: 如果我在关系上添加此删除规则,然后删除其中一个人,那么它不会对任务执行任何操作,但人会被删除。 任务仍然指向我们删除的人
  • 用例:我觉得没地方用。
  1. Nullify : 如果我应用此删除规则并删除人员,则关联任务将指向空人员。例如,我删除了 thor 和 thor 任务将指向 null 人。检查以下输出。

  • 用例: 假设我们有包含人员和地址的数据库。现在有人把他的房子卖给经纪人。在这种情况下,您可以取消该地址的人,并在新人购买该房屋时将所有者重新分配给该房屋。
  1. Cascade : 在此规则中,如果我删除该人,那么它将删除与该人关联的所有任务。例如,我删除了蜘蛛侠,检查下面的输出。

  • 用例: 假设我们有一个用户和他的好友列表。如果删除了用户账号那么我们还要删除好友列表。
  1. 拒绝: 现在我们有一个人,即 IronMan 有 2 个任务。在此规则中,如果我尝试删除钢铁侠,则不允许我这样做。它在保存上下文时给出错误 "The operation couldn’t be completed. (Cocoa error 1600.)"。现在要删除钢铁侠人物,我们需要删除他的所有关联任务,然后我们才能删除人物。
  • 用例: 让我们假设,有一个拥有银行账户的用户。在他的帐户未关闭之前,我们无法从银行中删除该用户。