尽管Core Data是Apple Enterprise Object Framework的后代,Apple Enterprise Object Framework是与关系后端紧密关联的对象关系映射器(ORM),但Core Data 不是 ORM。实际上,它是一个对象图管理框架。它管理着一个可能很大的对象实例图,允许应用程序通过根据需要对对象进行内存内和内存外故障而无法完全适合内存的图。核心数据还管理对属性和关系的约束,并保持引用完整性(例如,在将对象添加到关系中/从关系中删除对象时,使前后链接保持一致)。因此,核心数据是用于构建MVC架构的“模型”组件的理想框架。
为了实现其图形管理,Core Data 恰好使用SQLite作为磁盘存储。它可能已经使用不同的关系数据库,甚至非关系数据库,如已经实施的CouchDB。正如其他人指出的那样,Core Data也可以使用XML或二进制格式或用户编写的原子格式作为后端(尽管这些选项要求整个对象图都适合内存)。如果您对如何在SQLite后端上实现Core Data感兴趣,则可能需要查看OmniGroup的OmniDataObjects框架,它是Core Data API子集的开源实现。所述BaseTen框架也使用PostgreSQL作为后端核心数据API的实现。
由于Core Data并不是SQLite的ORM,因此它无法读取任意SQLite模式。相反,您不应该依赖于能够使用其他SQLite工具读取Core Data的SQLite数据存储;模式是可能更改的实现细节。
因此,直接使用Core Data或SQLite之间确实没有任何冲突。如果需要关系数据库,请使用SQLite(直接或通过Objective-C包装器之一,例如FMDB)或关系数据库服务器。但是,您可能仍想学习用作对象图管理框架的Core Data。在与苹果公司的控制器类和键值结合兼容视图控件组合,可以实现一个完整的MVC架构有非常少的代码。