CoreData建模反向关系

时间:2011-04-06 23:01:41

标签: iphone core-data data-modeling

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

我有以下示例:

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

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

我只有一个班级(实体)。封面(实体)在一本“书”上。在这本“书”中,封面是“frontCover”或“backCover”。因此,“book”的反转是“frontCover”或“backCover”。

无法在CoreData中建模。关系只能是一个关系的倒数,而不是这个或那个关系的关系。

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

感谢您的回答, 克里斯

3 个答案:

答案 0 :(得分:2)

这样做的一种方法是将Cover创建为具有两个子实体的“抽象”实体 - FrontCover&封底。然后你可以建立关系&与每一个相反。

答案 1 :(得分:2)

你可以做类似下面的模型(第一张图片)。这将使Cover的反向关系为零。但这对我来说并不合适。

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

enter image description here

enter image description here

答案 2 :(得分:0)

我只想补充一下。

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

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

该枚举区分封面是封面还是BackCover。

然后你从书到封面只设置了1“到很多”的关系。

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

同样创建两个subEntities与westSider的答案基本相同。子实体只是在原始实体上添加另一种关系。