核心数据:总是有反向关系。为啥?
Posted
技术标签:
【中文标题】核心数据:总是有反向关系。为啥?【英文标题】:Core Data: Always have inverse relationship. Why?核心数据:总是有反向关系。为什么? 【发布时间】:2013-04-30 15:23:30 【问题描述】:我知道 Apple 和共识都说,在 Core Data 中,每个关系都应该有逆向关系。这不是一个询问是否确实如此的问题。我相信苹果和专家。我只是想了解其中的原因。不幸的是,通常没有给出原因。
有时,建立反向关系是不切实际的。有时,我想放弃它们。但我想知道权衡是什么(而不是不祥的“不要那样做,这是危险”)。
所以,我要问为什么不放弃 Core Data 中的反比关系?
【问题讨论】:
【参考方案1】:通常的答案是“他们需要帮助维护数据完整性”。这是一个具体的例子。
假设您有一个Department
实体和一个Employee
实体。 Department
与 employees
与 Employee
有一对多关系,但没有对应的逆关系。有点做作,因为可能有充分的理由想要轻松查找员工的部门,但我想要一个简单的例子。
现在,假设我有一个名为“Department X”的特定部门实例,它用于公司的所有间谍。 X 部门有 7 名员工。但是,灾难!特工 004 被敌对公司杀死。因此,您的应用会删除 Agent 004 的 Employee
实例。
现在,部门 X 的 Department
实例有多少员工?
如果您对自己的工作不小心,它仍然有七名员工。但其中一个没有任何数据。为什么?因为没有人告诉Department
实例它的一名员工已经离开,所以它认为没有任何变化。六名普通雇员,我猜是一名不死僵尸雇员。
为了保持干净,您还需要获取 X 部门的 Department
实例,并从其员工列表中删除 Agent 004 的条目。
如果从 Employee
到 Department
存在反向关系,并且您使用了合理的删除规则,这将自动发生。当您删除特工 004 的实例时,部门 X 的员工列表将立即只显示六名员工。
如果没有反向关系,也不是不可能做到这一点,但如果你有一个,Core Data 会关注某些有助于维护对象图完整性的细节。
【讨论】:
非常感谢您的回答,汤姆!所以它基本上归结为“没有反向关系,你必须保持引用完整性,就好像你没有使用核心数据一样”?我认为,对于特殊情况,我可以忍受。 我完全同意你的看法。 +1以上是关于核心数据:总是有反向关系。为啥?的主要内容,如果未能解决你的问题,请参考以下文章