核心数据复杂的关系

时间:2013-09-06 02:25:20

标签: ios core-data ios7

我有以下实体:

  • 扇区
  • 数据

注意:

  • 每个组可以有一个或多个扇区
  • 每个组可以有一个或多个数据。集团内的每个部门可以拥有其集团拥有的全部或任何数据(默认情况下,每个部门将拥有其集团中的所有数据;然后每个部门都能够取消标记其不需要的任何数据)
  • 每个扇区可以与其组中的一个或多个扇区相关联

我该如何设计这种关系?

2 个答案:

答案 0 :(得分:1)

你不需要主键, 核心数据不是关系数据库

在* .xcdatamodel

上的图形模式下建立2个实体之间的关系

点击带有ctrl的实体[指针将变为+],然后将生成的线拖到另一个实体,将其设置为一对一或一对多

答案 1 :(得分:1)

您不需要主键,我认为您不会在这里处理非常复杂的关系。可能需要“GroupSector”和“SectorData”,但你也可以使用这样简单的东西。

enter image description here

  • 集团有很多部门;这种关系暗示“一个或多个”。
  • 集团有很多数据。
  • 数据有一个组。
  • Sector有很多(或可能属于很多)组。您的“每个部门只能成为一个集团的一部分,或者也可能成为另一个集团的一部分”的措辞令人困惑,但似乎意味着与集团之间存在“与众不同”的关系。
  

集团内的每个部门都可以拥有其集团拥有的全部或任何数据(默认情况下,每个部门将拥有其集团中的所有数据;然后每个部门都能够取消标记其不需要的任何数据)

使用此模型,Sector可以从其所属的组中检索相关数据。 Group拥有的任何数据,Sector都可以轻松获得。也就是说,扇区可能不需要所有的Group数据,这就是“untaggedData”属性的用途。该属性可以包含对该扇区应该取消标记的任何数据的引用。拥有该部门的集团甚至可能没有这些数据,但如果确实如此,那么它将是“未标记的”。我不完全确定这是否是你想要的,所以必要时要澄清。

  

每个部门都可以与其集团内的一个或多个部门相关联。

使用此模型,您应该能够轻松确定哪些扇区属于特定组。你也可以给Sector一个与他们自己的“很多”关系,看起来像这样:

enter image description here

<强>更新

根据你的评论:

  

但是“untaggedData”

的属性类型应该是什么

这取决于。它可以是一个简单的NSString,其中包含逗号分隔的数据属性集合,例如名称(例如,@“数据名称1,数据名称2,...”,假设数据具有不更改的名称属性)。也就是说,如果您在Data中引用的属性可能会发生变化,那么这不是一条很好的路径,您可能需要尝试不同的数据模型。

解决方案可能是删除“untaggedData”属性并使用另一个名为SectorData的实体。该实体与Sector有“一对一”的关系,与Data有“to many”关系。它还应与Sector中的新sectorData关系和Data中的sectorData具有反比关系。可能有一种方法可以压缩所有这些,但请按原样尝试,让我知道你的情况。祝你好运!

enter image description here