Core Data 复杂关系
Posted
技术标签:
【中文标题】Core Data 复杂关系【英文标题】:Core Data complicated relationship 【发布时间】:2013-09-06 02:25:19 【问题描述】:我有以下实体:
组 部门 数据注意:
每个组可以有一个或多个扇区 每个组可以有一个或多个数据。组内的每个扇区可以拥有其组拥有的全部或任何数据(默认情况下,每个扇区将拥有其组中的所有数据;然后每个扇区能够取消标记它不需要的任何数据)李> 每个扇区可以与其组内的一个或多个扇区无关联我应该如何设计关系?
【问题讨论】:
下面由 Kyle W. 回答。感谢凯尔。 【参考方案1】:您不需要主键,我认为您在这里处理的不是非常复杂的关系。可能需要“GroupSector”和“SectorData”,但您也可以使用像这样简单的东西。
集团有很多部门;这种关系暗示了“一个或多个”。 组有很多数据。 数据有一个组。 扇区有很多(或可以属于很多)组。您所说的“每个部门只能是一个组的一部分,也可以是另一个组的一部分”令人困惑,但似乎暗示了与组的“对多”关系。组内的每个扇区可以拥有其组拥有的所有数据或任何数据(默认情况下,每个扇区将拥有其组中的所有数据;然后每个扇区能够取消标记它不需要的任何数据)
使用此模型,Sector 可以从其所属的 Group 中检索相关数据。 Group 拥有的任何数据,Sector 都可以轻松获取。也就是说,一个部门可能不想要所有的组数据,这就是“untaggedData”属性的用途。该属性可以包含对该部门应未标记的任何数据的引用。具有该扇区的组甚至可能没有该数据,但如果有,它将是“未标记的”。我不完全确定这是否是您想要的,因此如有必要请澄清。
每个扇区可以与其组内的一个或多个扇区无关联。
使用此模型,您应该能够轻松确定哪些部门属于特定组。您还可以为 Sector 提供另一个与其自身的“对多”关系,如下所示:
更新
根据您的评论:
但是“untaggedData”的属性类型应该是什么
这取决于。它可以是一个简单的 NSString,其中包含逗号分隔的 Data 属性集合,例如 name(例如 @"data name 1 , data name 2, ..." 假设 Data 具有不变的 name 属性)。也就是说,如果您在 Data 中引用的属性可能会发生变化,那么这不是一个好的选择,您需要尝试不同的数据模型。
解决方案可能是去掉“untaggedData”属性并使用另一个名为 SectorData 的实体。该实体将与 Sector 具有“对一”关系,与 Data 具有“对多”关系。它还应该与 Sector 中的新扇区数据关系和 Data 中的扇区数据具有反比关系。可能有一种方法可以浓缩所有这些,但请按原样尝试,让我知道你的表现如何。祝你好运!
【讨论】:
非常感谢凯尔。这正是我需要开始的。我将从这里开始,非常感谢! 没问题。我很高兴能帮助您指出正确的方向。如果它回答了您的问题,请不要忘记接受我的解决方案;) 抱歉,Kyle,但“untaggedData”的属性类型应该是什么?【参考方案2】:你不需要主键, 核心数据不是关系数据库
在 *.xcdatamodel 的图形模式下在 2 个实体之间建立关系
用ctrl点击一个实体[指针会变成+],然后将生成的线拖到另一个实体上,使其一对一或一对多
【讨论】:
我不确定有这么高声誉的人会说 RTFM...我是新手,刚刚学会使用核心数据。我已经知道如何创建实体和添加关系......这是基本的,我已经使用它创建了一个应用程序......但是如果你仔细阅读我的问题,我更关心部门和数据之间关系的复杂性。 .. 因为我更像是一个 SQL db 用户,所以我展示的场景对我来说很复杂......对你有好处,你什么都知道,我只是希望我能尽快找到答案......无论如何,谢谢 嗨,好的,现在更清楚了,截取你的数据库图,重新表述你的问题,以便我们更好地帮助你以上是关于Core Data 复杂关系的主要内容,如果未能解决你的问题,请参考以下文章
使用 Spring Data 进行复杂查询(使用具有 ManyToOne 关系的 2 个表)