多对多关系为单个实体
我目前正在使用核心数据编写我的第一个项目,并且在解决如何查询一些数据之间的关系时遇到问题。多对多关系为单个实体
在SQL语言中,我有一个国家的表,它连接到一个查询Countrylink MM表包含以下字段:
- countryId1
- countryId2
- 轴承
会是什么在Core Data中对此进行建模的正确方法?
到目前为止,我已经建立了一个国家实体和一个CountryLink实体(仅包含一个方位字段)并添加了两个从Country到CountryLink('CountryLink1'和'CountryLink2')的1对多关系。
我已经运行该项目,并看着通过核心数据产生SQLite的数据库结构(found here,使用this SQLite的GUI),和MM连接表似乎是正确的(它包含的轴承,CountryLink1和CountryLink2领域),但我不知道如何执行一个单一的国家NSManagedObject提取请求返回相关国家及其方位的数组?
任何帮助或相关链接将不胜感激。
谢谢,泰德
首先提醒一句:
核心数据不是SQL。实体不是表格。对象不是行。列不是属性。核心数据是一个对象图管理系统,它可能会或可能不会持久化对象图,并且可能会或可能不会在后台使用SQL来做到这一点。试图用SQL语言来思考核心数据会导致你完全误解核心数据,并导致很多悲伤和浪费时间。
现在,忘记了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并不真正建模或模拟,它只是存储。