新核心数据实体与现有实体相同:独立实体或其他解决方案?

时间:2010-07-20 19:56:21

标签: objective-c core-data

概述:我正在设计一个餐馆管理应用程序,我有一个名为Order的实体,它有Items。由于餐厅可以运行多年,有数千个已完成的“订单”,为了使我的应用程序的网络方面更容易并保持数据库的快速,我想介绍一个ClosedOrder的概念,这是一个订单已经支付,基本上。

我有几个选项可以做到这一点:我可以在我的Order实体中添加一个isClosed属性,并使用谓词执行所有对'open'命令的获取请求,但是这样可以解决有很多记录的问题。每次需要提取时都需要DB,因为我的应用程序的工作流程通常使用Order实体。如果我理解正确,创建'ClosedOrder'子实体也会遇到同样的问题,因为Core Data会将所有子实体存储在数据库的同一个表中。

在这种情况下创建一个完全独立的实体是愚蠢的吗?或者这正是我需要做的?我为我对数据库性能的整体缺乏了解表示歉意,Core Data很漂亮,因为它摘要需要了解它,但同时它实际上并不能使它变得不重要,特别是在这样的情况下,性能如果它被我的用户推得太远,可能会严重降级。

1 个答案:

答案 0 :(得分:2)

如果您正在使用SQLite商店类型且“isClosed”属性为“Indexed”(实体编辑器面板中的设置),则您可能会有数十万个订单,并且在过滤时仍然可以获得良好,快速的获取时间仅适用于“isClosed == YES”。

创建一个单独的实体并不能真正为你带来太多的性能,但是当它发生变化时,使得维护变得更加困难(例如,两个迁移步骤以一个价格为单位)。您仍然存储所有这些项目,并且SQLite在正确设置时是一个称职的数据库库。在此处使用索引属性,然后生成一些测试数据,然后测量性能。我相信你会满意的。