我知道 Apple 和共识都说在 Core Data 中,每个关系都应该有一个逆向关系。这不是一个询问是否确实如此的问题。我相信苹果和专家。我只是想了解其中的原因。不幸的是,通常没有给出原因。
有时,建立反向关系是不切实际的。有时,我想放弃它们。但我想知道权衡是什么(而不是不祥的“不要那样做,这很危险”)。
那么,我在问为什么不放弃 Core Data 中的反比关系?
我知道 Apple 和共识都说在 Core Data 中,每个关系都应该有一个逆向关系。这不是一个询问是否确实如此的问题。我相信苹果和专家。我只是想了解其中的原因。不幸的是,通常没有给出原因。
有时,建立反向关系是不切实际的。有时,我想放弃它们。但我想知道权衡是什么(而不是不祥的“不要那样做,这很危险”)。
那么,我在问为什么不放弃 Core Data 中的反比关系?
通常的答案是“他们需要帮助维护数据完整性”。这是一个具体的例子。
假设您有一个Department
实体和一个Employee
实体。Department
与 有一对多关系employees
,Employee
但没有对应的逆关系。有点做作,因为可能有充分的理由想要轻松查找员工的部门,但我想要一个简单的例子。
现在,假设我有一个名为“Department X”的特定部门实例,它用于公司的所有间谍。X 部门有 7 名员工。但是,灾难!特工 004 被敌对公司杀死。因此,您的应用会删除 Agent 004 的Employee
实例。
Department
现在,部门 X的实例有多少员工?
如果您对自己的工作不小心,它仍然有七名员工。但其中一个没有任何数据。为什么?因为没有人告诉Department
实例它的一名员工已经离开,所以它认为一切都没有改变。六名正式员工,我猜是一名不死僵尸员工。
为了保持干净,您还需要获取Department
Department X 的实例,并从其员工列表中删除 Agent 004 的条目。
如果从Employee
back 到存在反向关系Department
,并且您使用了合理的删除规则,这将自动发生。当您删除代理 004 的实例时,部门 X 的员工列表将立即显示只有六名员工。
如果没有反向关系,也不是不可能做到这一点,但如果你确实有一个,Core Data 会关注某些有助于维护对象图完整性的细节。