核心数据:可转换类型还是一对多关系?
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 的数组:
- 不可能有其他
NSManagedObjects
的数组(CoreData 会混淆);
- 你必须自己维护或计算反向关系(在你的例子中,如果你有一个
Markbook
并且想知道它与哪个 Student
相关,你必须扫描所有Student
objects 来定位它。如果你在CoreData中创建一个反向关系,它将由CoreData免费填充和管理);和
- 不能将可转换属性作为获取请求的谓词的一部分进行“检查”。因此,如果您希望获取所有
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” " 视情况而定。
我是一名菜鸟,很难全神贯注于核心数据。
我创建了一个应用程序,它可以很好地保存到文件管理器,但如果其中包含大量数据,速度就会变慢。我想将其升级为核心数据。
我已经成功地从我的基本 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 的数组:
- 不可能有其他
NSManagedObjects
的数组(CoreData 会混淆); - 你必须自己维护或计算反向关系(在你的例子中,如果你有一个
Markbook
并且想知道它与哪个Student
相关,你必须扫描所有Student
objects 来定位它。如果你在CoreData中创建一个反向关系,它将由CoreData免费填充和管理);和 - 不能将可转换属性作为获取请求的谓词的一部分进行“检查”。因此,如果您希望获取所有
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” " 视情况而定。