Ios 为什么一个实体需要一个逆矩阵?

Ios 为什么一个实体需要一个逆矩阵?,ios,core-data,entity,entity-relationship,Ios,Core Data,Entity,Entity Relationship,我有一个非常简单的核心数据模型,由一个包含多个图像的库组成。在我看来,对于一个图库来说,与图像有一对多的关系就足够了,但如果我不建立从图像到图库的反向关系,我会收到编译器警告和错误。从面向对象的角度来看,在我看来,图像不应该知道或关心它是否在图库或任何其他ManagedObject中,那么为什么编译器强迫我创建这种反向关系呢?在图像上使用“gallery”属性似乎是非常错误的。核心数据使用反向关系来帮助维护引用完整性。当您更改关系或删除对象时,会显著提高性能。如果没有反转,这些相同的操作可能会导

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

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

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


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

我认为你不能将oo原则应用到数据库结构中——它们不在同一个域中。核心数据是关于表和行以及它们之间的指针。让我们看看引用完整性和您的库示例。如果图像与库之间没有关系,则当您要删除图像时,系统将不知道是否要删除库中的引用。你可以有理由争辩说,这种细节应该被注意,但我认为你就是这样,你应该接受它。可能会向苹果发送一份bug报告。

这是他们经常说的。“引用完整性”,这对我来说毫无意义。如果一个实体有一个反向,那么我可以看到它需要如何声明。但是,如果像OP的情况一样,图像没有引用库,如果库被删除,或者图像被从库中删除,图像上的任何内容都不需要更改,等等。我认为你是对的,这更多地与性能有关。如果是这样的话,为什么核心数据就不能提供一个自动的幕后反转呢?或者,在某些情况下,不可能自动推断出逆应该是什么?谢谢。我不能假装理解你的答案,因为我对这个领域没有很好的了解,但如果它的表现明显更好,我想这是一个足够好的理由。然而,彻底破坏封装似乎是一个可怕的代价。在由User:Gallery:Gallery:Image组成的对象图中,Image可以获取对用户的引用,这完全是错误的。是的。我认为问题在于托管对象是对象,但它们仍然受数据库结构规则的约束。我不应该关心反向引用。这是应该在幕后处理的细节。