两个 CoreData 实体之间可以有多个“对多”关系吗?
Posted
技术标签:
【中文标题】两个 CoreData 实体之间可以有多个“对多”关系吗?【英文标题】:Can two CoreData entities have more than one "to-many" relationship between them? 【发布时间】:2012-05-12 06:11:48 【问题描述】:我的模型有一个实体“过滤器”和一个实体“颜色”。我想在它们之间建立两个“To-Many”关系:“backgrounds”和“foregrounds”。 (即每个“过滤器”包含一组背景颜色和一组前景色,所有类型均为“颜色”)。
我有两个问题。首先,当我建立关系时,“颜色”的倒数只能有一个值(我猜这意味着我不能做我想做的事)。其次,我不知道如何创建一个谓词来仅获取背景或仅获取前景。我假设以下内容将返回所有合并在一起的内容(如果它确实有效):
NSFetchRequest *fetchRequest = [NSFetchRequest fetchRequestWithEntityName:@"Color"];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"filter == %@", self];
我将通过将 Color 转换为两个 Foreground 和 Background 实体来解决这个问题,但我不想在不理解为什么单个实体不起作用的情况下这样做。我在这里遗漏了什么吗?
注意:这对我来说显然不直观。我再次遇到了这个确切的问题,但是这次我没有使用谓词,所以我没有立即找到问题。我有一个非常相似的设置,但是当我尝试删除一个孩子时,它最初会消失,但是当我重新启动我的应用程序时,它会多次出现。我带走的孩子越多,我得到的就越多。我最终注意到两个关系数组中都有相同的孩子,当我查看模型的图形版本时,只有一个关系有一个与孩子相连的箭头。最后,我记得我以前遇到过这个问题!我不太明白发生了什么,但显然两个子“数组”以一种奇怪的方式合并在一起。
【问题讨论】:
【参考方案1】:是的。
关于多对多关系的理论
假设你有一个实体 CHILD,它不是男孩就是女孩。每个孩子都可以有一组(对多)他们所有的兄弟姐妹。但是每个孩子还可以再拥有两组(对多)他们的所有 1:兄弟和 2:姐妹。
“兄弟姐妹”的反向关系是“isSiblingTo”(或兄弟姐妹)。而“brothers”和“sisters”的反义词是“isBrotherTo”和“isSisterTo”。
这很简单,因为两个实体都相同。
假设我是一个拥有一套蜡笔和一套玩具的孩子。我可能在这两个系列中都有我的红色蜡笔,即我必须与它有很多关系。
归根结底,红色蜡笔既是我的 CRAYON 也是我的玩具。 与上面的兄弟姐妹示例一样,孩子的兄弟既是他们的兄弟姐妹,他们的兄弟也是他们的兄弟姐妹,他们的兄弟姐妹既是他们的兄弟姐妹也是他们的姐妹。
更新:您不需要成为这两种关系的一部分。你可以有一个没有兄弟姐妹关系但有兄弟姐妹关系的孩子,其他孩子与他们有相反的关系(这更接近你的颜色+滤镜示例)
应用于您的示例
所以,如果你有它的用途,它是可行的。想想他们在日常语言中的关系,并将相反的设置为 isForegroundColorTo 和 isBackgroundColorTo。
具有多对多关系的数据模型
颜色模型定义
过滤器模型定义
【讨论】:
非常感谢您的详细回答。由于某种原因,我没有想到在孩子身上添加第二个关系。再次感谢!以上是关于两个 CoreData 实体之间可以有多个“对多”关系吗?的主要内容,如果未能解决你的问题,请参考以下文章