核心数据:总是有反比关系。为什么?

时间:2013-04-30 15:23:31

标签: core-data relationship

我知道Apple和共识都说在核心数据中,每个关系都应该有反向。这不是一个问题,问这是否确实如此。我相信苹果和专家。我只想理解这个推理。不幸的是,往往没有给出理由。

有时,反向关系是不切实际的。有时候,我想放弃它们。但我想知道这些权衡是什么(而不是一个不祥的“不要那样做,它是危险的”)。

所以,我问不放弃Core Data中反向关系的原因是什么?

1 个答案:

答案 0 :(得分:5)

通常的答案是“他们需要帮助维护数据完整性”。这是一个具体的例子。

假设您有一个Department实体和一个Employee实体。 Department具有多对多关系employeesEmployee,但没有相应的反向关系。有点做作,因为可能有很好的理由想要轻松查找员工的部门,但我想要一个简单的例子。

现在,假设我有一个名为“Department X”的特定部门实例,该实例适用于所有公司的间谍。 X部门有7名员工。但是,灾难!特工004被竞争对手公司杀害。因此,您的应用会删除代理004的Employee实例。

现在,部门X的Department实例有多少名员工?

如果你没有注意到你在做什么,它仍然有七名员工。但其中一个没有任何数据。为什么?因为没有人告诉Department实例,其中一名员工已经离开,所以它认为没有任何改变。六名正式员工,我猜是一名不死僵尸员工。

为了保持清洁,您还需要获取Department X的Department实例,并从其员工列表中删除Agent 004的条目。

如果从Employee回到Department存在反向关系,并且您使用了理智的删除规则,则会自动发生这种情况。当您删除Agent 004的实例时,Department X的员工列表将立即只显示六名员工。

如果没有反向关系,这是不可能的,但如果你有一个,核心数据将负责管理某些有助于维护对象图完整性的细节。