【问题标题】:Modeling a one-to-many relationship in Core Data for iOS在 iOS 的 Core Data 中建模一对多关系
【发布时间】:2011-06-17 04:36:13
【问题描述】:

我有两个实体:患者和检查点。 患者具有出生日期、姓名、ID 等属性。 Checkpoint有dateRecorded、身高、体重等属性。

您可能明白了——我希望有一组患者,然后每个患者都可以有与该患者相关的检查点。

在这两个实体上,我应该如何设置设置?设置如下:

为此,我查看了documentation,但我仍然感到困惑。我认为我想要的是一对多的关系(对于患者),但是我不确定如何为它们中的任何一个设置倒数,或者删除规则和其他东西。谢谢你!!

【问题讨论】:

    标签: ios core-data entity-relationship one-to-many


    【解决方案1】:

    我这周刚开始使用 Core Data。好问题!

    关系:

    由于一个患者可以有多个检查点,Patient to Checkpoint 关系就是One to Many 关系。 “反向关系”的概念本质上是这样的:您有一个单向的关系(患者到检查点) - 现在继续从检查点的角度反向查看它。检查点只能应用于单个患者。因此,Checkpoint to Patient 关系是One to One 关系。

    反向关系:

    要处理逆关系,只需创建每个关系,忽略逆关系。然后,在每个对象上建立关系之后,继续将逆定义为另一个实体上的关系。

    换句话说,关系指向另一个实体或一组实体。 反向关系指向另一个实体上的关系。

    删除规则:

    就删除规则而言,它相当简单。尝试删除具有检查点的患者时...

    • 拒绝:Core Data 不允许您删除患者。
    • 级联:Core Data 将删除实体(患者),以及通过关系级联并删除这些对象。 (换句话说,Core Data 也会删除 Checkpoint 对象。)
    • 无效:Core Data 将删除患者,但首先删除关系。检查点将保持不变。

    对于 Patient 实体,可能需要拒绝或级联,具体取决于您希望如何管理数据。根据您的用例,您可能不希望取消,因为检查点依赖于患者实体。

    您希望检查点无效,因为级联会阻止您在不删除整个患者的情况下删除检查点,而拒绝将有效地强制执行相同操作。

    【讨论】:

    • 哇!!谢谢,我正在尝试。不过,我对倒数有点困惑。对于患者到检查点,是逆“检查点”吗?从 Checkpoint 到 Patient,倒数只是“Patient”,还是没有倒数?如果我理解你所说的,这两个值对于检查点和患者都是无效的。
    • 其实,等一下,我自己也很困惑。但是,应该只有一个菜单选项是正确的。
    • “应该只有一个正确的菜单选项”是什么意思?
    • 假设您在 Xcode 4 中。在没有指定反向关系的情况下创建两个关系后,反向下拉列表将填充一个选项。这些选项都是正确的。
    • 查看我的编辑(“换句话说......”)。这可能更容易理解。
    【解决方案2】:

    根据上述场景,患者表和检查点表之间看起来是一对多的关系。

    现在添加从“Patient”到“Checkpoint”的关系,并设置表之间的逆向关系。

    另外,将两个关系的删除规则设置为“级联”。这意味着,如果您使用 Patient 删除一个对象,则相应的 Coredata 也会删除关联的对象。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-27
      • 1970-01-01
      • 2010-12-03
      • 1970-01-01
      相关资源
      最近更新 更多