我有一个非常简单的核心数据模型,包含一个包含多个图像的图库。在我看来,Gallery应该足以与Image建立一对多的关系,但是如果我还没有建立从Image回到gallery的反向关系,我会得到编译器警告和错误。从面向对象的角度来看,在我看来,Image不应该知道或关心它是否在Gallery或任何其他ManagedObject中,为什么编译器强迫我创建这种反向关系?在图像上有一个“图库”属性似乎非常错误。
答案 0 :(得分:8)
核心数据使用反向关系来帮助维护参照完整性。当您更改关系或删除对象时,它会显着提高性能。如果没有反转,那些相同的操作可能会导致全表扫描。
在我看来,没有反转应该是错误而不是警告。在一些相当常见的情况下,差异可能很大。
想象一下没有它们的多实体级联删除。可能需要足够长的时间,操作系统认为您的应用已崩溃。
答案 1 :(得分:0)
我认为你不能将oo原则应用于数据库结构 - 它们不在同一个域中。核心数据是关于它们之间的表和行以及指针。让我们看一下参照完整性和你的画廊示例。如果您没有从图像到图库的关系,当您去删除图像时,系统将不知道在图库中删除其引用。你可以争论一些有效性,应该注意这种细节,但我认为你就是这样,你应该忍受它。也许发送一个错误报告给Apple ..