CoreData 关系与属性

Posted

技术标签:

【中文标题】CoreData 关系与属性【英文标题】:CoreData relationships vs. attributes 【发布时间】:2014-07-22 00:46:09 【问题描述】:

在我使用 CoreData 的应用程序中,我会创建两个相互关联的实体;假设ListItem 每个List 将有很多Items。现在我想知道哪个更好,在Item 实体中使用关系、一对多或父属性。例如,如果我将使用关系,我会将每个 Item 与其父 List 相关联。另一方面,如果我使用属性,我会将List 的 ID 保存在属性中。

使用关系或属性哪种方法更好,每种方法的优缺点是什么?

【问题讨论】:

【参考方案1】:

你应该使用关系。这会产生可扩展、可用且性能良好的代码。

父实体的概念实际上是完全不同的。它适用于共享相同基本属性并且可能仅与其他属性略有不同的实体。例如,Animal 可以是父实体,BirdMammal 可以是子实体。他们会有共同的领域,但也可能有一些不同的领域。

父实体的最大缺点是所有子实体都将存储在同一个 SQLite 表中,这最终会影响性能。

【讨论】:

即使使用关系,子实体也不会默认存储在同一个 SQLite 表中吗?我的意思是,如果我将创建多个子实体,它们将分别位于不同的表中(即每个实体的表包含其所有数据),并且每个都通过关系连接到其父实体。在这种情况下,我是使用关系还是存储 ID 的属性都没有关系。如果我错了,请纠正我。 是的,错了。您将父实体和子实体与由关系链接的普通实体混淆了。 (这些可以形成分层的、“类似父子”的结构。)也许你还混淆了数据库(本质上是一个文件)和表(这个文件中的结构元素)。

以上是关于CoreData 关系与属性的主要内容,如果未能解决你的问题,请参考以下文章

NSPredicate:“添加”一对多关系CoreData中所有实体的属性值

如何在coreData中获取与记​​录相关的关系

搜索 CoreData 关系

CoreData 实体和属性之间的关系

CoreData:获取具有给定属性和给定关系的对象?

CoreData 在一对多关系中编辑一个属性