【问题标题】:Core Data: Transformable Type or To-Many Relationship?核心数据:可转换类型还是多对多关系?
【发布时间】:2021-05-09 09:04:49
【问题描述】:

我是一个菜鸟,很难集中精力处理核心数据。

我创建了一个可以正常保存到文件管理器的应用程序,但由于其中包含大量数据而变得很慢。我想将其升级为核心数据。

我已经成功地从我的基本类中创建了一些可以正常保存的实体,但是当我有一个具有其他类的属性作为数组的类时,我不确定将其保存在核心中的方向数据。

简单示例:

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

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

每个学生实例都应该有自己的记分本,每个记分本都有多个记分本组件,可以更新个别学生的分数。

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

【问题讨论】:

    标签: swift core-data


    【解决方案1】:

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

    (虽然可以使用可转换的属性来表示对象数组:

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

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

    由于每个Markbook 可以有多个MarkbookComponent,因此将关系建模为“多对多”(然后在类中将其定义为一组Markbooks)。根据您的描述,我不确定 MarkbookComponent 是否只能与一个 Markbook 或多个相关:将反向关系建模为“一对一”或“一对多”。

    【讨论】:

      猜你喜欢
      • 2016-06-30
      • 1970-01-01
      • 1970-01-01
      • 2011-02-18
      • 2016-09-08
      • 2014-08-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多