可能已经有人在某处回答,但我并不觉得很抱歉这么愚蠢的问题
有两个实体父母和孩子
我想要父母的所有孩子然后我将使用像下面的谓词
这样的关系[NSPredicate predicateWithFormat:@"parent = %@", parent]
我将parent_id存储在子表中作为属性
并使用谓词
[NSPredicate predicateWithFormat:@"parent_id = %@", parentid]
现在我的问题是哪个给击球手表现以及如何? 因为我很困惑为什么我使用关系模型,因为我可以找到属性
答案 0 :(得分:2)
这两个版本都使它变得比它需要的复杂得多。如果在名为Parent
的变量中有parent
的实例,则可以通过直接查找关系的值来获取每个相关的child
,而无需执行获取或使用谓词任何一种。
NSSet *children = [parent valueForKey:@"child"];
或者,如果您创建了NSManagedObject
的子类来表示Parent
的实例,
NSSet *children = parent.child;
[顺便说一下,将child
引用重命名为children
之类的内容可能是一个好主意,因为这是一种多对多的关系。]
在你的例子中,第一个是...不太不合适,我会说。它仍然比它需要的更复杂,但Core Data提供关系相关实体的确切目的。像第二个示例中那样存储外键是将SQL风格的思想错误地应用于非SQL API。
答案 1 :(得分:1)
我不完全确定CoreData如何在内部工作,但我强烈认为关系更好。我想通过使用它们你基本上遵循指针,而使用谓词导致搜索某个实体的实例。
显然CoreData做了一些像关系数据库(使用sqlite作为默认存储等等),但由于教程告诉你使用关系来做你想做的事情,我很确定它依赖于某种方式进行优化。对于某些需要与数据模型“并行”的定义连接的情况,谓词更适合特定搜索或“解决方法”。