核心数据:有没有办法使用隐含关系而不是真实关系来有效地查询模型?
Posted
技术标签:
【中文标题】核心数据:有没有办法使用隐含关系而不是真实关系来有效地查询模型?【英文标题】:Core data: Is there any way to efficiently query a model using implied relationships instead of real ones? 【发布时间】:2012-03-29 15:14:39 【问题描述】:假设我有以下一种奇怪的核心数据模式:
在这个模型中,有账户和活动,它们共享一个项目的父实体。此外,还有一个关系实体对对象之间的关系进行建模,而不是让核心数据使用“真实”关系对关系进行建模。换句话说,关系实体被用作一种“连接表”。
鉴于此模型,我如何根据相关对象获取对象?例如,我将如何获取具有今天发生的活动的所有帐户?
似乎没有任何方法可以在单个提取请求中执行此操作。到目前为止我能想到的最好的事情是首先获取今天发生的活动,然后是 toId 与这些活动的 id 匹配的关系,最后是 id 与关系中的 fromId 匹配的帐户。
执行此操作的 3 个获取请求是次优的。我们将需要支持数十万的帐户和活动计数,并且执行所有这些获取可能会非常缓慢。在这种模型上使用 NSFetchedResultsController 也很尴尬。
是的,我知道这不是 Core Data 喜欢做事的方式,但是由于涉及我们的服务器架构和跨平台支持的各种原因,我们希望使用这个数据模型和 Core Data,因为它有很多好处提供。提前感谢您的帮助。
【问题讨论】:
【参考方案1】:将Account
和Activity
都与Relation
建立关系,即。称为relations
,并设置适当的反向关系(称为account
/activity
)。因此,您的所有项目,包括 Account
和 Activity
都可以有多个“关系”。
要将帐户链接到活动,请创建一个新的Relation
对象并设置其account
和activity
属性,然后将其添加到帐户和活动的relations
集中。
现在,如果您想获取所有具有活动的帐户,请获取活动的 relations
属性,并针对该集合中的所有项目检索 account
属性。应该可以将其集成到单个查询中。
【讨论】:
以上是关于核心数据:有没有办法使用隐含关系而不是真实关系来有效地查询模型?的主要内容,如果未能解决你的问题,请参考以下文章