Iphone 关系的核心数据建模

Iphone 关系的核心数据建模,iphone,ipad,core-data,Iphone,Ipad,Core Data,我正在核心数据中为我的应用程序建模。我有一个名为“stats”的对象,它将有一个“player”、“team”和一个与每个对象关联的“game”。一旦存储了这些统计数据对象,我可以想象通过任何一个或多个属性(玩家、团队、游戏)查询它们。见下面的模型 问题1:将这些建模为“关系”而不是“属性”有意义吗 问题2:检索时,我希望使用对象形成NSPredicate,而不必跟踪每个玩家、团队或游戏的唯一ID名称。如果我将玩家、团队和游戏对象(而不是唯一的ID或名称)与每个实体一起存储,那么检索它们的最佳

我正在核心数据中为我的应用程序建模。我有一个名为“stats”的对象,它将有一个“player”、“team”和一个与每个对象关联的“game”。一旦存储了这些统计数据对象,我可以想象通过任何一个或多个属性(玩家、团队、游戏)查询它们。见下面的模型

问题1:将这些建模为“关系”而不是“属性”有意义吗

问题2:检索时,我希望使用对象形成NSPredicate,而不必跟踪每个玩家、团队或游戏的唯一ID名称。如果我将玩家、团队和游戏对象(而不是唯一的ID或名称)与每个实体一起存储,那么检索它们的最佳方式是什么。如果我想检索特定“团队”(someTeamObject)的所有统计数据对象,或者我需要按ObjectID进行查询,那么下面的操作是否有效

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"team == %@", someTeamObject];
谢谢

  • 如果我对你的问题理解正确的话,是的,将它们建模为独立的对象并在它们之间建立关系是有意义的。它在获取各种对象时尤其有用;例如,您可以获取与给定属性关联的单个玩家,或者获取游戏的所有属性。这引出了你的第二个问题:

  • 不要使用谓词,注意你的关系有名称;您可以只调用相关的访问器方法,而不是使用关联的NSPredicate构建完整的NSFetchRequest。对于获取团队所有统计对象的请求,只需调用
    [Team stats]
    ,即可获得一个NSArray的统计对象


  • 谢谢你,蒂姆。回答2:是的,根据你的例子,我现在可以访问一个团队的所有统计数据,因为我与统计数据对象中的“玩家”和“游戏”有反向关系,我想我可以通过循环每个对象并测试这些对象来进一步完善该数组。我担心的是[team stats]NSSet可能非常大,为了进行其他测试,会将其加载到内存中。有没有更有效的方法?例如,让数据库做与客户端相反的工作?事实上还有更多的属性需要过滤(保持简单)JMH:我建议阅读错误,特别是在核心数据编程指南和NSManagedObject类参考中。值得注意的是,您可以在托管对象上调用
    isEqual:
    ,而不触发错误,这使得您可以在不需要大量内存的情况下迭代该集合。但是,如果您需要访问每个托管对象的属性,您是对的—使用NSPredicate构造一个获取请求来完成这项工作可能会更有效。在这种情况下,我相信您的原始示例可以使用
    =
    比较来工作。Tim,《核心数据编程指南》中的故障信息是正确的。谢谢我想在大多数情况下,我会使用NSPredicates来完成这项工作。我想保持我最初问题中定义的关系不会有什么坏处。