【问题标题】:Regarding Core Data Model Relationship关于核心数据模型关系
【发布时间】:2012-06-11 04:01:48
【问题描述】:

我正在尝试理解 CoreData 建模中的关系概念,并且很难理解什么实体可能是建立关系的良好感觉。有没有办法为可以对应另一个实体的关系生成唯一编号?所以假设我有一个新的实体条目,它将有一个唯一的关系信息编号 101,详细信息也将创建 101,因此可以以某种方式保持对应关系完好无损。不确定CoreData 模型是否已经解决了这个问题,以便有某种生成器来为两个实体生成唯一值。

谢谢

【问题讨论】:

  • 我不确定您是否完全了解 Core Data 的工作原理。 Core Data 在 SQL 数据库上运行,并为您处理诸如唯一 ID 和键之类的低级事物,因此您不必担心它们。实体可以具有属性,这些属性基本上是原始值。关系有点像从一个实体到另一个实体的双向指针。如果您需要从另一个实体引用一个实体,则使用关系。如果需要存储布尔值,则使用属性。请澄清你的问题。你到底想做什么?
  • @PartiallyFinite,我正在尝试在两个实体之间创建关系,但是我希望它是一个唯一的数字/字符串。所以让我们说它是一个人和地址,我可以为他们两个都设置一个唯一的 id 可以用作关系吗?所以如果我想查询这个人,我也可以根据唯一的 id 来获取这个人的地址。谢谢。
  • 你的想法太低了。 Core Data 不允许您访问对象的唯一标识符。相反,您使用 Xcode 中的 Editor 菜单为每个实体创建一个 NSManagedObject 子类,并使用 NSFetchedRequest 获取所有符合您设置的条件的实体。当您以这种方式获取一个人时,您可以简单地使用person.address 来获取分配给该人的地址。
  • 我建议你按照这个教程开始:raywenderlich.com/934/…
  • @PartiallyFinite,我确实完成了那个教程,但是我不确定,细节和信息如何使反向关系成为真正的关系?只是在那部分感到困惑。我希望你能理解我在这里的担忧?我在这里尝试使用主流主键/外键概念。不确定图片背后的关系是否完全相同?谢谢。

标签: iphone objective-c ios ipad core-data


【解决方案1】:

Core Data 是一个高级库,其目的是尽可能透明地管理和持久化对象图。 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 会返回此人的名字,而 person.private_address.city 会轻松返回此人的居住城市。 address.persons 返回所有共享相同地址(私人或/和工作)的人,作为 NSSet。 address.persons.count 返回有多少人共享该地址。你看到的是一个对象图。

Core Data 为每个实体提供某种唯一的 ID,一旦实体至少被保存,objectID,一个不透明的 NSManagedObjectID。 URIRepresentation 可能会更好地为您服务(同样,一旦实体被保存)。如果您的意图是创建跨商店关系,您可以使用 URIRepresentation 或使用您自己的唯一 ID。维护每个实体的唯一 ID 甚至每个商店的唯一 ID 都相当容易。

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

【讨论】:

    【解决方案2】:

    您可能需要阅读Core Data Programming Guide 以获得更好的理解。

    如果您有 SQL 背景,关系基本上代表一个FOREIGN KEY 或连接表,相互映射对象。

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

    然后,您可以使用 Core Data 轻松添加、删除或以其他方式访问给定公司的员工。

    因此,一种关系用于将实体实例相互关联。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-12-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-22
      • 1970-01-01
      • 2013-12-25
      • 1970-01-01
      相关资源
      最近更新 更多