【问题标题】:CoreData modelling inverse relationshipCoreData 建模逆关系
【发布时间】:2011-07-31 05:55:11
【问题描述】:

Apple 的文档建议在 CoreData 中对数据模型进行建模时使用反向关系。

我有以下例子:

一本书(实体)有几个“页面”和一个“frontCover”和一个“backCover”。 页面(实体)在一本“书”中(因此“书”是“页面”的倒数)。

到目前为止,这是标准情况......但是现在,我的问题:

我只有一个类封面(实体)。封面(实体)在一本“书”上。在这本“书”上,封面是“frontCover”或“backCover”。所以,“book”的反义词是“frontCover”或“backCover”。

这不能在 CoreData 中建模。关系只能是一种关系的逆,但不能是这种或那种关系的逆。

对此建模的最佳方法是什么?单向关系(无反转)?

感谢您的回答, 克里斯

【问题讨论】:

    标签: iphone core-data data-modeling


    【解决方案1】:

    您可以执行以下模型(第一张图片)之类的操作。这将使 Cover 的反比关系为零。不过,这对我来说并不合适。

    另一个选项(第二张图片)是给 Book 一个引用 2 Cover 对象的“covers”关系,并给 Cover 一个 isFront 布尔属性。这将允许称为“书”的反向关系。

    【讨论】:

    • 嗯...我有点喜欢第二种选择。但是,显示所有书籍的所有封面会困难得多(在第一种情况下可以一次操作完成)。此外,我必须确保 Book.covers 有 2 个且只有 2 个封面,其中只有一个是封面。 .... 选项 1 确实感觉有点奇怪,但实际上是我想要的...也许我会选择这个选项...或者我会坚持从书到封面的单向关系。
    【解决方案2】:

    一种方法是将封面创建为具有两个子实体的“抽象”实体 - FrontCover 和 BackCover。然后你可以创建关系并与其中的每一个相反。

    【讨论】:

    • 是的,总的来说我同意。通常,FrontCover 和 BackCover 之间至少有一些区别,所以这将是两个子类的理由......但是,在我的特殊情况下(书和封面只是一个修剪过的玩具示例),有封面和封底完全没有区别。更糟糕的是,在某些情况下,封面可能会变成封底,反之亦然。所以在我的特殊情况下,这会反对这个解决方案......
    【解决方案3】:

    我只想补充。

    一种方法是拥有 2 个子实体。但这只有在 FrontCover 和 BackCover 差异很大时才有用。

    如果它们是完全相同的对象,则应该在实体中使用枚举。

    那个枚举区分封面是frontCover还是BackCover。

    那么你只设置了从书到封面的 1 个“对多”关系。

    coredata 的目的是保存您的数据。无论如何,您的逻辑都应该在代码中。

    同时创建两个子实体与 westSider 的回答基本相同。子实体只需在原始实体上添加另一个关系。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多