2011-03-10 109 views
0

我目前正在使用核心数据编写我的第一个项目,并且在解决如何查询一些数据之间的关系时遇到问题。多对多关系为单个实体

在SQL语言中,我有一个国家的表,它连接到一个查询Countrylink MM表包含以下字段:

  • countryId1
  • countryId2
  • 轴承

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

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

我已经运行该项目,并看着通过核心数据产生SQLite的数据库结构(found here,使用this SQLite的GUI),和MM连接表似乎是正确的(它包含的轴承,CountryLink1和CountryLink2领域),但我不知道如何执行一个单一的国家NSManagedObject提取请求返回相关国家及其方位的数组?

任何帮助或相关链接将不胜感激。

谢谢,泰德

回答

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 
} 

当您添加国家和CountryLink对象将它们添加到作为关系需要。然后要找到与特定的Country对象相关的对象CountryLink,您可以在Country实体上为符合某些条件的Country对象执行提取。一旦你拥有了这个对象,你只需要询问它的countryLinks关系中的CountryLink对象。你完成了。

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