单个实体的多对多关系

时间:2011-03-10 17:37:12

标签: cocoa-touch core-data ios4

我目前正在使用核心数据编写我的第一个项目,并且无法确定如何查询某些数据之间的关系。

在sql语言中,我有一个Country表,它连接到包含以下字段的CountryLink M-M表:

  • countryId1
  • countryId2
  • 轴承

在Core Data中对此进行建模的正确方法是什么?

到目前为止,我已经建立了一个国家实体和一个CountryLink实体(仅包含一个方位字段),并在Country到CountryLink('CountryLink1'和'CountryLink2')中添加了两个1对多关系。

我运行该项目并查看Core Data(found here生成的Sqlite数据库结构,使用this sqlite gui),并且MM连接表似乎正确(它包含方位, CountryLink1和CountryLink2字段),但我不确定如何执行单个国家NSManagedObject的获取请求以返回相关国家及其轴承的数组?

非常感谢任何帮助或相关链接。

谢谢,特德

1 个答案:

答案 0 :(得分:1)

首先要警告:

核心数据不是SQL。实体不是表格。对象不是行。列不是属性。核心数据是一个对象图管理系统,可能会或可能不会持久保存对象图,并且可能会或可能不会使用远远落后的SQL来执行此操作。试图用SQL术语来思考核心数据将导致你完全误解核心数据并导致更多的悲伤和浪费时间。

请参阅Tequilla advice

现在,忘记SQL并思考对象图,你的实体看起来像这样:

Country{
    someAttribute:string // or whatever
    countryLinks<-->>CountryLink.country
}

CountryLink{
    countryID1:string // or whatever
    countryID2:string // or whatever
    country<<-->Country.countryLinks
}

在添加Country和CountryLink对象时,可以根据需要将它们添加到关系中。然后,要查找与特定CountryLink对象相关的Country个对象,您可以在Country实体上对符合某些条件的Country个对象执行提取。拥有该对象后,您只需要询问其CountryLink关系中的countryLinks个对象。而你完成了。

这里需要记住的重要一点是,与managedObjects结合使用的实体旨在模拟真实世界的对象,条件或事件以及它们之间的关系。例如一个人和他的车。 SQL并不真正建模或模拟,它只是存储。