核心数据:总是有反向关系。为啥?

Posted

技术标签:

【中文标题】核心数据:总是有反向关系。为啥?【英文标题】:Core Data: Always have inverse relationship. Why?核心数据:总是有反向关系。为什么? 【发布时间】:2013-04-30 15:23:30 【问题描述】:

我知道 Apple 和共识都说,在 Core Data 中,每个关系都应该有逆向关系。这不是一个询问是否确实如此的问题。我相信苹果和专家。我只是想了解其中的原因。不幸的是,通常没有给出原因。

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

所以,我要问为什么不放弃 Core Data 中的反比关系?

【问题讨论】:

【参考方案1】:

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

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

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

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

如果您对自己的工作不小心,它仍然有七名员工。但其中一个没有任何数据。为什么?因为没有人告诉Department 实例它的一名员工已经离开,所以它认为没有任何变化。六名普通雇员,我猜是一名不死僵尸雇员。

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

如果从 EmployeeDepartment 存在反向关系,并且您使用了合理的删除规则,这将自动发生。当您删除特工 004 的实例时,部门 X 的员工列表将立即只显示六名员工。

如果没有反向关系,也不是不可能做到这一点,但如果你有一个,Core Data 会关注某些有助于维护对象图完整性的细节。

【讨论】:

非常感谢您的回答,汤姆!所以它基本上归结为“没有反向关系,你必须保持引用完整性,就好像你没有使用核心数据一样”?我认为,对于特殊情况,我可以忍受。 我完全同意你的看法。 +1

以上是关于核心数据:总是有反向关系。为啥?的主要内容,如果未能解决你的问题,请参考以下文章

创建核心数据反向关系

核心数据反向关系

是否可以在核心数据模型中自动创建反向关系?

使用核心数据的父实体继承和反向关系

从核心数据获取请求中排除反向关系

核心数据继承 - 管理子类的反向关系