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 复杂关系的主要内容,如果未能解决你的问题,请参考以下文章

Core Data 中的异步对象构造

使用 Spring Data 进行复杂查询(使用具有 ManyToOne 关系的 2 个表)

核心数据:如何删除关系中的实体

union 分页/group/join 复杂查询(.net core/framework)

掌握递归关系时间复杂度的定理

Spring总结————spring核心Core