Core data 从三个实体获取请求,三个实体之间有到多个关系、核心数据

Core data 从三个实体获取请求,三个实体之间有到多个关系、核心数据,core-data,many-to-many,nsfetchrequest,Core Data,Many To Many,Nsfetchrequest,在过去的几周里,这个网站对我来说是一个非常有用的资源,因为我刚刚开始用XCode编码。现在我遇到了一个核心数据问题,我知道如何在通用数据库中解决这个问题,但在核心数据中却没有。如果有人能给我指出解决方案,我会很高兴。我可以用一些关键词做进一步的研究,所以问题是: 让我们以一个食谱为例,将成分链接到食谱:假设您有一个成分实体,每个成分都可以出现在多个食谱中,并且您有一个食谱实体,每个食谱实体都有一个名称并包含多个成分。这方面最好的数据模型是什么 我所做的是引入第三个表,它将配方名称与配料联系起来,

在过去的几周里,这个网站对我来说是一个非常有用的资源,因为我刚刚开始用XCode编码。现在我遇到了一个核心数据问题,我知道如何在通用数据库中解决这个问题,但在核心数据中却没有。如果有人能给我指出解决方案,我会很高兴。我可以用一些关键词做进一步的研究,所以问题是:

让我们以一个食谱为例,将成分链接到食谱:假设您有一个成分实体,每个成分都可以出现在多个食谱中,并且您有一个食谱实体,每个食谱实体都有一个名称并包含多个成分。这方面最好的数据模型是什么

我所做的是引入第三个表,它将配方名称与配料联系起来,因此它只包含两个关系(都指向多个),分别指向配料实体和配方实体。但是,我现在如何获取给定配方的配料呢

可能我需要使用一个获取请求,但我需要在获取中执行两个步骤——基本上是说“获取与翻译实体中与我当前配方相关的对象相关的成分实体的所有实例”。。。有什么想法吗


谢谢大家

要在核心数据中对此进行建模,可以采用以下两种方法之一:

  • 使用一对对多关系,每个方向一个。如果
    配方
    实体具有对多
    成分
    关系,则与之相反的是
    成分
    实体的对多
    配方
    关系

  • 使用中间实体,如
    RecipeingCredit
    ,就像您所做的那样。
    配方
    成分
    都可能与
    配方成分
    有一对多的关系,但每一对都可能是一对多的关系

  • 无论使用哪种方法,您仍然只需要一个获取请求。假设你想得到名为“布朗尼”的食谱的配料。您需要为实体
    配方
    创建一个获取请求,并使用一个谓词来选择
    名称,比如“Brownies”
    。这将为您提供一组符合要求的食谱。然后,您可以使用关系访问这些配方中任何一种的配料——也就是说,您不需要另一个配料获取请求。假设您采用了第二种方法,并且
    配方
    配方成分
    之间存在一种称为
    配方成分列表
    的对多关系,
    配方成分
    之间存在一种对一关系:

    Recipe *recipe = [recipes anyObject];
    NSSet *ingredientList = recipe.ingredientList;
    for (RecipeIngredient *item in ingredientList) {
        Ingredient *ingredient = item.ingredient;
        //...do something with the ingredient...
    }
    
    如果改用第一种方法,您可以更直接地访问一组配料:

    Recipe *recipe = [recipes anyObject];
    NSSet *ingredients = recipe.ingredients;
    for (Ingredient *ingredient in ingredients) {
        //...do something with the ingredient...
    }
    

    无论哪种方式,关键是一旦从核心数据存储中获取了对象,就不需要再进行任何获取来获取相关数据。核心数据将在幕后为您做到这一点。与直接使用数据库相比,这是使核心数据更具吸引力的因素之一。

    嘿,Caleb,非常感谢你的回答,非常详细,也正是我所需要的。我想我会支持你提出的模型,因为这完全有道理,而我的想法来自于数据库,我想是这样的想法。再次感谢!:)