级联删除如何在核心数据中的多对多关系中起作用?

时间:2012-06-20 04:09:36

标签: database core-data cascading-deletes

说,我们有2个实体:父母孩子

删除父级后,所有子级也会被删除。

现在我们有名为情人的实体。

每个人都可以“爱”许多其他人并被许多人所爱。

如果个人被删除会怎样?

是否级联删除:

  1. 根本不工作?
  2. 当最后一个爱你的人被删除时删除你?
  3. 或者什么?

1 个答案:

答案 0 :(得分:1)

我认为,你不应该以这种方式使用cascade,因为它删除你删除的对象的所有爱好者,它可能会越走越远并删除整个数据库。

因此,更好的方法是拥有一个中间(“连接”)实体,例如 loverInfo 。 根据朋友关系,这就是Apple如何建议您这样做。

  

最初被建模为多对多关系的关系的一个常见例子是“朋友”。虽然你是表弟的堂兄,无论他们喜欢与否,但你不一定是你朋友的朋友。对于这种关系,您应该使用中间(“连接”)实体。中间实体的一个优点是您还可以使用它来为关系添加更多信息 - 例如,“FriendInfo”实体可能包含一些关于具有“排名”属性的友谊强度的指示。这在这里说明

FIgure 3

  

在这个例子中,Person与FriendInfo有两对多的关系:朋友代表源人的朋友,而朋友则代表那些将来源统计为他们的朋友的人。 FriendInfo代表一个友谊的信息,“在一个方向上。”给定的实例记录了源是谁,以及他们认为是他们的朋友的一个人。如果感觉是相互的,那么将会有一个相应的实例来交换源和朋友。在处理这种模型时还有其他一些注意事项:

  • 要建立从一个人到另一个人的友谊,你必须这样做 创建一个FriendInfo的实例。如果两个人都喜欢对方,那么 必须创建两个FriendInfo实例

  • 要破坏友谊,您必须删除相应的实例 FriendInfo。

  • 从Person到FriendInfo的删除规则应该是级联的。如果一个 person将从商店中删除,然后是FriendInfo实例 变得无效,所以也必须删除。
  • 作为必然结果,从FriendInfo到Person的关系一定不能 是可选的 - 如果源或,则FriendInfo的实例无效 朋友是空的。