0

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

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

所以这是我的问题。我是否必须将托管对象编写为 sqlLite 数据库 shema(带有拆分表等......)并开始编写一些方法来从这些表中构造我的模型对象?或者我应该将托管对象精确地写为模型对象吗?它们将更容易重建,但效率会降低吗?

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

我希望我的问题很清楚。

谢谢,

亚历山大

4

2 回答 2

2

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

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

一般的建议是核心数据已经存在很长时间了,你在创建对象和保持它们在线程间同步、缓存和访问速度方面遇到的任何问题都已经被核心数据团队遇到并修复了。节省一些工作,站在巨人的肩膀上,使用 Core Data。

于 2013-01-28T12:33:01.160 回答
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 进行详细编辑,这也将帮助您。

于 2013-01-28T13:01:57.147 回答