关于核心数据库设计

时间:2013-01-28 12:23:20

标签: ios database database-design core-data

我正在开发一个IOS应用程序一个月,我觉得我已经准备好创建数据库了。因此,当我在学校学习时,我拿起铅笔开始创建我的数据库设计。

然后我开始阅读核心数据指南,事实上我已经使用过核心数据,但它是在较小的项目中。所以我读到了Managed Object,它们似乎总是完全适合应用程序的模型对象(MVC)。

所以这是我的问题。我是否必须将受管对象编写为sqlLite数据库shema(使用拆分表等...)并开始编写一些方法来从thoses表构造我的模型对象?或者我应该将托管对象exaclty写为Model对象吗?它们将更容易重建但不会效率低下吗?

以另一种方式提问:核心数据库shema应该看起来像带有拆分表的sqlLit数据库还是应该看起来像我的模型对象集?

我希望我的问题很明确。

谢谢,

亚历山大

2 个答案:

答案 0 :(得分:2)

如果要使用核心数据,则不应以任何方式与SQLite数据库进行交互。核心数据存储对象的确切方式对您来说应该是不透明的。

没有什么能阻止你自己编写数据库层。您可以直接创建SQLite数据库并与之交互,并自己完成所有操作。

一般建议是核心数据已经存在了很长时间,并且核心数据团队已经遇到并修复了在线程,缓存和访问速度方面遇到的任何问题。保存自己的一些工作,站在巨人的肩膀上并使用核心数据。

答案 1 :(得分:1)

仅仅因为您已经使用iOS标记了您的问题,您可以做的最好的事情之一就是忘记您以前在关系数据库中使用的传统模型关系技术(尤其是与Web应用程序一起使用的技术),并构建您的NSManagedObject图还取决于您在UI中的用途。

当你有像UITableView这样的东西时尤其如此。例如,如果您只在表格单元格中显示标题和说明,然后您拥有包含所有数据的详细信息视图,那么就可以像这样对图形进行建模:

EntityMain {
  NSString *title,
  NSString *desc,
  // other that may be useful, such as a state...ecc
  toOne relationship --> EntityDesc
}

EntityDesc {
  NSString *prop1,
  NSString *prop2,
  ......
  ....
  NSString *prop 20
}

例如,通过NSFetchedResultsController检索EntityMain,而在详细视图中,您可以检索整个对象。在这种情况下,您不会获取超过必要的内容,并且性能将受益。

如果你想要一个单独的NSManagedObjectContext进行细节编辑,这也会有所帮助。