核心数据inheritancevs无inheritance

我有核心数据的一些问题,所以我希望有人能够帮助我:)

第一个问题,我有一个数据模型,看起来像这样:

Entity P (A) <----> Entity R / | \ / /\ \ / / | \ \ CDEFG 

我所有的实体都从同一个实体“P”inheritance,因为它们需要一个共同的属性和一个共同的关系(“A”和“R”)

我得到的问题是,当您使用inheritance时,核心数据使用只会为所有实体生成一个sqlite表。 在我的情况下,这意味着我的数据库将只有一个表的所有数据。 我做了一些研究,我发现它造成了性能问题(此外,我所有的实体属性都是瞬态的,在willSave中,它们的值被聚合到一个存储在“A”中的NSData中,所以我不能使用谓词来过滤并提高SELECT性能)。 所以我决定删除“P”,并把“A”join“C”,“D”…,“G”。 问题是与“R”,因为之前我只有一个反向关系,现在我需要创build一个每次我创build一种新的实体。 所以我想删除所有的逆关系,这是可能的吗? 有时我需要创build一个没有上下文的托pipe对象,我将它们插入到上下文中,这可能是为什么反向关系不是由核心数据自动设置的,如果在插入MOC之前设置了非反转权限? 无论如何,我从来不需要反过来,所以即使我得到一个警告,我可以避免定义它们吗?

第二个问题,在特定的情况下,我需要创build一个新的“R”,并在MOC保存期间将其分配给“C”,“D”,..,“G”。 所以我想使用willSave,但是,我不知道创build的实体是否会被保存。 如果MOC在“insertedObjects”/“updatedObjects”/“deletedObjects”上做一个简单的循环,并且对于它调用的每个对象将保存,然后调用didSave,这意味着我要修改数组它正在迭代,然后它应该崩溃没有?

由于您和我都独立发现了困难的方式,对于彼此inheritance的实体要非常小心。 我也发现核心数据往往会使一个巨大的表格包含基本实体的所有字段以及从其衍生的所有实体,所以任何给定的实体都包含从最远的祖先向下的每个潜在实体的字段。 非常非常慢,而且很贵。

我强烈推荐只让实体类自己相互inheritance,并且在所有实体中镜像基类的属性,而不在托pipe对象模型本身中进行任何实际的inheritance。

核心数据不是你的sql表的封装。 它处理对象图及其持久性。 SQLite商店只是一种持久的方式。 检查一下。 防止核心数据合并为一个表