为什么实体需要逆?

时间:2011-10-15 17:36:16

标签: ios core-data entity entity-relationship

我有一个非常简单的核心数据模型,包含一个包含多个图像的图库。在我看来,Gallery应该足以与Image建立一对多的关系,但是如果我还没有建立从Image回到gallery的反向关系,我会得到编译器警告和错误。从面向对象的角度来看,在我看来,Image不应该知道或关心它是否在Gallery或任何其他ManagedObject中,为什么编译器强迫我创建这种反向关系?在图像上有一个“图库”属性似乎非常错误。

2 个答案:

答案 0 :(得分:8)

核心数据使用反向关系来帮助维护参照完整性。当您更改关系或删除对象时,它会显着提高性能。如果没有反转,那些相同的操作可能会导致全表扫描。

在我看来,没有反转应该是错误而不是警告。在一些相当常见的情况下,差异可能很大。

想象一下没有它们的多实体级联删除。可能需要足够长的时间,操作系统认为您的应用已崩溃。

答案 1 :(得分:0)

我认为你不能将oo原则应用于数据库结构 - 它们不在同一个域中。核心数据是关于它们之间的表和行以及指针。让我们看一下参照完整性和你的画廊示例。如果您没有从图像到图库的关系,当您去删除图像时,系统将不知道在图库中删除其引用。你可以争论一些有效性,应该注意这种细节,但我认为你就是这样,你应该忍受它。也许发送一个错误报告给Apple ..