具有关系的核心数据模型

Posted

技术标签:

【中文标题】具有关系的核心数据模型【英文标题】:Core data model with relationships 【发布时间】:2016-01-30 04:38:50 【问题描述】:

我一直在为我的应用程序开发我的核心数据模型。我相信我的最终模型是正确的,但有些事情我有点困惑。这就是我想做的:

    用户为一副牌创建一个名称。 然后用户被带到另一个输入屏幕,他们将在其中输入问题和答案,以他们创建的先前名称保存。 问题和答案都将保持相互关联,并与他们的名字保持关联。 (每组也可以有多个问答对)

我所做的是这样的:

从我读过的in this guide 看来,我似乎不需要单独的实体来回答问题。看来我可以在 Name 实体下创建这两个关系。所以我不太确定是应该只在 Name 实体下创建问答关系,还是应该为问题和答案设置单独的实体。

【问题讨论】:

【参考方案1】:

如果您的第一个实体是一组问题,您可能应该将其称为 Deck 而不是 Name

您的第二个实体名称应该是单数,因为每个实体代表一个 Card 对象。

由于每张卡片都有一个问题和答案,因此您不必使用单独的 QuestionAnswer 实体对其进行建模。只需将每张卡片的答案及其问题存储起来。

至于为什么要将问题和答案存储在单独的实体中,这是建模一对多关系的唯一有效方法,其中每个牌组都有许多卡片(或问题)。

否则,将没有直观的方式来表示套牌本身内(固定或)可变数量的问题和答案属性。在最坏的情况下,您的 Deck 最终会看起来像:

extension Deck 
    @NSManaged var name: String
    @NSManaged var question1: String
    @NSManaged var answer1: String
    @NSManaged var question2: String
    @NSManaged var answer2: String
    @NSManaged var question3: String
    @NSManaged var answer3: String
    @NSManaged var question4: String
    @NSManaged var answer4: String
    ...
 

【讨论】:

感谢@petah 的精彩回答。这对我有很大帮助。我可以安全地对我的模型进行这些重大更改而无需开始一个新项目吗?只需进行更改,删除我的 NSManagedObject 子类并生成新的? 是的。无需开始新项目。

以上是关于具有关系的核心数据模型的主要内容,如果未能解决你的问题,请参考以下文章

具有多个映射模型的复杂核心数据迁移

如何创建父实体和关系的核心数据模型

如何添加和查看核心模型关系的数据

具有自定义核心数据模型的部分名称键路径

涉及新实体和一对多关系的核心数据迁移

核心数据模型级联删除和父实体