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

Sha*_*amy 46 core-data objective-c relationships ios swift

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

我有实体A和B.A与B有to-Many关系,B与A有to-One关系.

A <--- >> B

现在,如果我将删除规则设置为A到Cascade,我知道它会删除与之相关的所有B.但是如果我将它设置为Nullify,它会将Bs设置为NIL还是将外键设置为Nil?

我到处看看从B到A的关系,我应该把它设置为Nullify吗?这只会在A处剔除"B对象"吗?或者它会否使与A相关的所有B都无效?Cascade怎么样?它会删除与A关联的所有B,还是只删除特定的B?

或者我只是对从B到A的关系使用"无操作",这样当我删除B时,A不会发生变化,但是对B的引用将不存在?

我很担心这些,所以请原谅我的问题.

谢谢.

Pau*_*w11 64

如果将删除规则设置为"nullify"并删除A对象,则将删除对Bs中该对象的引用.逆向工作方式相同.如果你有级联并删除B,那么它将删除B指向的A. 然后它将遵循从A到剩余B的删除规则(级联或无效).

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

Apple Core数据编程指南中描述了关系删除规则


dah*_*boy 6

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


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

样本数据和ER关系

在此处输入图片说明 在此处输入图片说明在此处输入图片说明


删除规则说明

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

在此处输入图片说明

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

在此处输入图片说明

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