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



我是一个新手,很难理解核心数据。

我已经创建了一个应用程序,可以很好地保存到文件管理器,但在其中有大量数据时速度很慢。我想把这个升级为核心数据。

我已经成功地创建了一些实体我的基本类,坚持只是很好,但当我有一个类,有其他类的属性作为数组,我不确定什么方向去有它保存在核心数据。

简单的例子:

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

每个学生实例都应该有自己的markbook,每个markbook将有多个markbook组件,可以更新单个学生的标记。

对于我的核心数据Student实体,正确的方法是什么:我是使markbook转换类型来实现markbook数组,还是使markbook实体与Student具有多对多关系?这种多对多的关系会给每个学生带来自己的个人印记吗?

使用关系;你的问题是它们被发明出来的目的。

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

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

关于关系的基数性,如果每个Student最多可以有一个Markbook,则该关系可以为"to- 1";(并且将在类中定义为类型为Markbook的属性,而不是数组[Markbook])。假设每个Markbook同样只与一个Student相关,那么反比关系也将是"1 - 1"。

由于每个Markbook可以有多个MarkbookComponent,因此将关系建模为"多对多";(然后将在类中定义为一组Markbooks)。从你的描述中,我不确定MarkbookComponent是否只能与一个Markbook相关,或者不止一个:将反向关系建模为"一对一";或";to-many"适当。

最新更新