Apple的文档建议在CoreData中建模数据模型时使用反向关系。
我有以下示例:
书(实体)有几个“页面”和一个“frontCover”和一个“backCover”。 页面(实体)在一本“书”中(因此“书”是“页面”的倒数)。
好了到目前为止,这是标准情况......但是现在,我的问题:
我只有一个班级(实体)。封面(实体)在一本“书”上。在这本“书”中,封面是“frontCover”或“backCover”。因此,“book”的反转是“frontCover”或“backCover”。
无法在CoreData中建模。关系只能是一个关系的倒数,而不是这个或那个关系的关系。
对此进行建模的最佳方法是什么?单向关系(无反转)?
感谢您的回答, 克里斯
答案 0 :(得分:2)
这样做的一种方法是将Cover创建为具有两个子实体的“抽象”实体 - FrontCover&封底。然后你可以建立关系&与每一个相反。
答案 1 :(得分:2)
你可以做类似下面的模型(第一张图片)。这将使Cover的反向关系为零。但这对我来说并不合适。
另一个选项(第二张图片)是给Book一个引用2个Cover对象的'cover'关系,并给Cover一个isFront布尔属性。这将允许称为“书”的反向关系。
答案 2 :(得分:0)
我只想补充一下。
一种方法是拥有2个子实体。但是,只有当FrontCover和BackCover差异很大时,这才有用。
如果它们是完全相同的对象,则应在实体中使用枚举。
该枚举区分封面是封面还是BackCover。
然后你从书到封面只设置了1“到很多”的关系。
coredata的目的是保存您的数据。无论如何,你的逻辑应该在代码中。
同样创建两个subEntities与westSider的答案基本相同。子实体只是在原始实体上添加另一种关系。