Iphone 关于核心数据模型关系

Iphone 关于核心数据模型关系,iphone,objective-c,ios,ipad,core-data,Iphone,Objective C,Ios,Ipad,Core Data,我正试图理解CoreData建模中的关系概念,它越来越难理解什么样的实体可能是一种良好的关系。是否有一种方法可以为一个关系生成一个唯一的编号,该编号也可以对应于另一个实体?假设我有一个新的实体条目,它将有一个关系信息的唯一编号101,细节也将有101创建,因此可以有一个完整的对应关系。不确定CoreDataModel是否已将其排序,以使用某种生成器为两个实体生成唯一值 感谢核心数据是一个高级库,其目的是尽可能透明地管理和保存对象图。核心数据如何链接数据库中的对象(顺便说一句,它不一定是数据库)是

我正试图理解
CoreData
建模中的关系概念,它越来越难理解什么样的实体可能是一种良好的关系。是否有一种方法可以为一个关系生成一个唯一的编号,该编号也可以对应于另一个实体?假设我有一个新的实体条目,它将有一个关系信息的唯一编号101,细节也将有101创建,因此可以有一个完整的对应关系。不确定
CoreData
Model是否已将其排序,以使用某种生成器为两个实体生成唯一值


感谢

核心数据是一个高级库,其目的是尽可能透明地管理和保存对象图。核心数据如何链接数据库中的对象(顺便说一句,它不一定是数据库)是一个实现细节

在模型编辑器中,只需创建所需的实体并将其与关系链接。核心数据为您管理连接

Person:
- first_name: string
- middle_name: string
- last_name: string
- private_address: -> Address (to-one relationship)
- work_address: -> Address (to-one relationship)

Address:
- persons: ->> Person (to-many relationship, you may want to reuse an address)
- address1: string
- address2: string
- zip: string
- city: string
- country: string    
...
person.first_name返回此人的名字,person.private_address.city返回此人的居住城市。address.persons将共享同一地址(私人或/和工作)的所有人员作为NSSet返回。address.persons.count返回共享该地址的人数。你看到的是一个对象图

核心数据为每个实体提供某种唯一的ID,一旦实体至少保存了objectID,即不透明的NSManagedObjectID。您可能会更好地使用URI表示(同样,在保存实体之后)。如果您打算创建跨门店关系,则可以使用URI表示或使用自己的唯一ID。维护每个实体的唯一ID,甚至每个门店的唯一ID都相当容易


但大多数情况下,您不必处理如此低级别的问题。Core Data非常擅长为您管理关系。

Core Data是一个高级库,其目的是尽可能透明地管理和持久化对象图。核心数据如何链接数据库中的对象(顺便说一句,它不一定是数据库)是一个实现细节

Person:
- first_name: string
- middle_name: string
- last_name: string
- private_address: -> Address (to-one relationship)
- work_address: -> Address (to-one relationship)

Address:
- persons: ->> Person (to-many relationship, you may want to reuse an address)
- address1: string
- address2: string
- zip: string
- city: string
- country: string    
...
在模型编辑器中,只需创建所需的实体并将其与关系链接。核心数据为您管理连接

Person:
- first_name: string
- middle_name: string
- last_name: string
- private_address: -> Address (to-one relationship)
- work_address: -> Address (to-one relationship)

Address:
- persons: ->> Person (to-many relationship, you may want to reuse an address)
- address1: string
- address2: string
- zip: string
- city: string
- country: string    
...
person.first_name返回此人的名字,person.private_address.city返回此人的居住城市。address.persons将共享同一地址(私人或/和工作)的所有人员作为NSSet返回。address.persons.count返回共享该地址的人数。你看到的是一个对象图

核心数据为每个实体提供某种唯一的ID,一旦实体至少保存了objectID,即不透明的NSManagedObjectID。您可能会更好地使用URI表示(同样,在保存实体之后)。如果您打算创建跨门店关系,则可以使用URI表示或使用自己的唯一ID。维护每个实体的唯一ID,甚至每个门店的唯一ID都相当容易


但大多数情况下,您不必处理如此低级别的问题。核心数据非常适合为您管理关系。

您可能需要阅读以获得更好的理解

Person:
- first_name: string
- middle_name: string
- last_name: string
- private_address: -> Address (to-one relationship)
- work_address: -> Address (to-one relationship)

Address:
- persons: ->> Person (to-many relationship, you may want to reuse an address)
- address1: string
- address2: string
- zip: string
- city: string
- country: string    
...
如果您来自SQL背景,关系基本上表示一个
外键
或联接表,将对象彼此映射

假设你有一家
公司
,它有许多
员工
。您可以为这两种类型创建实体,并在公司和员工之间建立一对多关系(如果员工为多个公司工作,甚至可以建立多对多关系)

使用核心数据,您可以轻松添加、删除或以其他方式访问给定公司的员工


因此,关系用于将实体实例彼此关联。

您可能需要阅读以更好地理解

如果您来自SQL背景,关系基本上表示一个
外键
或联接表,将对象彼此映射

假设你有一家
公司
,它有许多
员工
。您可以为这两种类型创建实体,并在公司和员工之间建立一对多关系(如果员工为多个公司工作,甚至可以建立多对多关系)

使用核心数据,您可以轻松添加、删除或以其他方式访问给定公司的员工


因此,关系用于将实体实例彼此关联。

我不确定您是否完全了解核心数据的工作原理。核心数据在SQL数据库上运行,并为您处理诸如唯一ID和密钥之类的低级事务,因此您不必担心它们。实体可以有属性,这些属性基本上是基本值。关系有点像从一个实体到另一个实体的双向指针。如果需要从另一个实体引用某个实体,则可以使用关系。如果需要存储布尔值,可以使用属性。请澄清你的问题。你到底想做什么?@PartiallyFinite,我试图在两个实体之间创建一个关系,但我希望它是一个唯一的数字/字符串。那么,假设它是一个人和地址,我可以为他们两个都有一个唯一的id,可以作为一种关系使用吗?因此,如果我想查询此人,根据唯一id,我还可以获取此人的地址。谢谢。你的思维水平太低了。核心数据不允许您访问对象的唯一标识符。相反,您可以使用Xcode中的编辑器菜单为每个实体创建一个
NSManagedObject
子类,并使用
NSFetchedRequest
获取与您设置的条件匹配的所有实体。当你拿一个