我对Core Data Relationships删除规则有点模糊。所以,如果有人可以帮我回答一些关于他们的问题。
我有实体A和B. A与B有to-Many关系,而B与A有to-One关系。
A< --->>乙
现在,如果我将A中的删除规则设置为Cascade,我知道它会删除与之相关的所有B。但是如果我将它设置为Nullify,它会将Bs设置为NIL还是将外键设置为Nil?
我到处看看B到A之间的关系,我应该把它设置为Nullify吗?那只会扼杀" B对象"在A?或者它会否使与A相关的所有B都无效? Cascade怎么样?它会删除与A关联的所有B,还是仅删除特定的B?
或者我只是使用" No Action"关于从B到A的关系,这样当我删除B时,A不会发生变化,但是对B的引用不会存在?
我很担心这些,所以请原谅我的问题。
感谢。
答案 0 :(得分:63)
如果将删除规则设置为“nullify”并删除A对象,则将删除对Bs中该对象的引用。逆向工作方式相同。如果你有级联并删除B,那么它将删除B指向的A.然后它将遵循从A到剩余B的删除规则(级联或无效)。
您设置的规则实际上取决于您的数据模型。如果A是客户而B是他们的订单,那么您可以将A-> B规则设置为拒绝(如果客户有订单则阻止A被删除)或级联(删除客户时删除订单)。 B-> A规则可能是“无效”。如果删除订单,只需从客户处删除对订单的引用。
中描述答案 1 :(得分:2)
如果您设置“ nullify”并删除A的对象,则仅删除A的对象和后向关系,而不删除B的对象。
例如:客户实体与订单具有取消关系。如果您从客户实体中删除客户,则只会从order中删除客户及其后退关系。它不会删除客户的订单
但是,如果关系是“级联”,它将删除客户及其订单。
如果为“ deny”。如果客户有任何订单,则不会删除甚至删除客户。
答案 2 :(得分:0)
使用删除规则进行更深入的说明和可视化。
假设我们拥有与表人员一起工作的数据库。单人可以完成许多任务。
示例数据和ER关系
无操作::如果我在关系上添加此删除规则,然后删除其中一个人,则该任务不会执行任何操作,但会删除人。 任务仍然指向我们删除的人。
无效::如果我应用此删除规则并删除人员,则关联任务将指向空人员。例如,我删除了thor,thor任务将指向空的人。检查下面的输出。
级联:在此规则中,如果我删除此人,则它将删除与该人相关的所有任务。例如,我删除了蜘蛛侠,请检查下面的输出。
拒绝:现在,我们有一个人,即IronMan,有两个任务。在此规则中,如果我尝试删除“钢铁侠”,则不允许这样做。保存上下文时出现错误"The operation couldn’t be completed. (Cocoa error 1600.)"
。现在要删除钢铁侠人物,我们需要删除他的所有相关任务,然后才能删除该人物。