核心数据:可转换类型还是一对多关系?

Core Data: Transformable Type or To-Many Relationship?

我是一名菜鸟,很难全神贯注于核心数据。

我创建了一个应用程序,它可以很好地保存到文件管理器,但如果其中包含大量数据,速度就会变慢。我想将其升级为核心数据。

我已经成功地从我的基本 classes 中创建了一些实体,这些实体仍然很好,但是当我有一个 class 具有其他 classes 的属性作为数组时,我不确定要将其保存在核心数据中的方向。

简单示例:

class Student {
  let name: String
  let markbook: [Markbook]
}

class Markbook {
  let name: String
  let components: [MarkbookComponent]
}

每个学生实例都应该有自己的成绩簿,每个成绩簿都有多个可以更新个别学生成绩的成绩簿组件。

对于我的核心数据 Student 实体,什么是正确的方法:我是制作 markbook 可转换类型来实现 markbook 数组,还是制作一个与 Student 具有一对多关系的 Markbook 实体?这种一对多关系是否为每个学生提供了自己的个人成绩单?

利用关系;你的问题是它们的发明目的。

(尽管可以使用可转换属性来表示 objects 的数组:

  1. 不可能有其他 NSManagedObjects 的数组(CoreData 会混淆);
  2. 你必须自己维护或计算反向关系(在你的例子中,如果你有一个 Markbook 并且想知道它与哪个 Student 相关,你必须扫描所有Student objects 来定位它。如果你在CoreData中创建一个反向关系,它将由CoreData免费填充和管理);和
  3. 不能将可转换属性作为获取请求的谓词的一部分进行“检查”。因此,如果您希望获取所有 Markbooks 以及标题为“English”的 MarkbookComponent,您必须首先获取所有 Markbooks,然后在内存中过滤它们。)

关于关系的基数,如果每个Student最多可以有一个Markbook,那么关系可以是“to-one”(并且将在class 作为 Markbook 类型的 属性 而不是数组 [Markbook])。假设每个 Markbook 同样只与一个 Student 相关,反向关系也将是“to-one”。

由于每个 Markbook 可以有多个 MarkbookComponent,将关系建模为“to-many”(然后将在 class 中定义为一组Markbooks)。根据您的描述,我不确定 MarkbookComponent 是否只能与一个 Markbook 或多个相关:将反向关系建模为“to-one”或“to-many” " 视情况而定。