核心数据关系混乱

时间:2012-05-22 15:49:22

标签: iphone ios core-data

如果我有两个实体; Foo和Bar。而Foo有两个属性; bar的bar1和bar2。现在,Foo与Bar有一对多的关系吗?至少它应该像Core Data中那样建模吗?还是两个一对一的关系?如何在Core Data中正确设置反向?我理解的一对多关系,但不是最后的关联类型?这甚至是可能的或好的方式吗?

3 个答案:

答案 0 :(得分:2)

  

而Foo有两个属性; bar的bar1和bar2。现在Foo   与Bar有一对多的关系?

不,Foo与Bar有两种关系,这些关系名为bar1bar2。他们是“一对一”还是“对多”取决于你如何指定它们。在模型中选择每个,然后查看是否选中“to-many”复选框。

  

至少应该像核心数据那样建模吗?

这取决于你想要建模的东西。您是否希望与特定对象建立两个独立的关系(这是两个不同的“一对一”关系),或者您是否希望与一组对象建立单一关系(一个“对多”关系)?这是一个可能有助于澄清事情的例子......

企业可能拥有零个或多个员工。一家企业还有一名首席执行官和一名董事会主席。因此,Business实体可能与Person实体具有名为employees的“to-many”关系。它也可能具有名为ceochairman的“一对一”关系,再次使用Person。那些可能不是绝对必要的 - 也许首席执行官和董事长都是员工,所以你可以通过搜索一组员工并按职称筛选来找到他们。但如果你经常使用它们并且不希望每次都要搜索成千上万的其他员工,那么把它们作为单独的关系是很方便的。

  

如何在Core Data中正确设置反向?

同样,它取决于你的建模。例如,employees关系的反转将是人的employer“对一”关系。

答案 1 :(得分:1)

实体有几种不同类型的属性,它们具有属性和关系(以及获取的属性,但这不是重点)。听起来Foo和Bar是你用Foo创建Bar属性的两个类。然后,您希望将这些实体同化为核心数据模型中的实体。

通常,事情是相反的。您可以在Core Data模型编辑器中创建实体。然后,您可以通过创建关系来链接实体。如果你添加一个从Foo到Bar的关系,那么最好创建一个从Bar到Foo的反向关系。

  1. 创建从Foo到Bar的关系
  2. 创建从Bar到Foo的关系
  3. 选择最后一个关系,并将其与第一个关系设置为
  4. 现在,如果您希望Xcode生成匹配的NSManagedObject子类Foo和Bar,那么您可以选择实体,并在Xcode Editor菜单中选择“Create NSManagedObject subclasses”

    然后,您将看到两个具有适当属性的类,以匹配您的模型的设置方式。

    我在Core Data上撰写了一本书,解释了所有这些更深入的细节。

答案 2 :(得分:0)

这是两个一对一的关系。 要进行逆操作,只需在反向字段中选择实体(当您创建关系时)。