Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
iOS应用程序考试的核心数据模型_Ios_Objective C_Core Data_Database Design_Database Schema - Fatal编程技术网

iOS应用程序考试的核心数据模型

iOS应用程序考试的核心数据模型,ios,objective-c,core-data,database-design,database-schema,Ios,Objective C,Core Data,Database Design,Database Schema,我正在构建一个用于考试的iOS应用程序,我想在继续之前确定我的模型 我觉得这篇文章很有帮助: 我只是想要一些关于为核心数据实现简化版本的建议 以下是我的一些假设: 每个用户可以进行一次测试 每个用户在每次测试中都有一组答案 每个测试有一个用户 每个问题都有很多答案 以下是我的核心数据模型: 问题: 这个模型是否准确地反映了我的假设 是否需要测试问题和用户答案? 理论上,我可以直接在测试和问题之间建立关系测试-->>问题 如有任何改进意见,将不胜感激 您应该能够删除测试问题和用户答案

我正在构建一个用于考试的iOS应用程序,我想在继续之前确定我的模型

我觉得这篇文章很有帮助:

我只是想要一些关于为核心数据实现简化版本的建议

以下是我的一些假设:

  • 每个用户可以进行一次测试
  • 每个用户在每次测试中都有一组答案
  • 每个测试有一个用户
  • 每个问题都有很多答案
以下是我的核心数据模型:

问题:

  • 这个模型是否准确地反映了我的假设
  • 是否需要
    测试问题
    用户答案
    • 理论上,我可以直接在
      测试
      问题
      之间建立关系<代码>测试-->>问题
  • 如有任何改进意见,将不胜感激

您应该能够删除测试问题和用户答案表。目前,在测试问题和测试、用户答案和用户之间存在一对一的映射关系,这实际上没有任何意义

从理论上讲,您也可以将测试和用户结合起来,因为它们也是一对一的,但您可能会认为它们是独立的关注点,应该每个都有一个表

此外,虽然设计确实符合您的假设,即测试只有一个用户,但您确定这就是您想要的吗?这意味着测试只能与单个用户关联

如果是这样的话,你可以做另一个简化。您可以在答案表中添加一个字段,如“wasSelectedByUser”,并删除用户与答案之间的关系,因为这样您就可以从用户到测试再到问题再到答案,并确定用户选择了什么


您可以使用您定义的模型,但在验证阶段,要知道用户是否通过了测试可能有点棘手,因此我建议您进行以下简化(我没有考虑字段,但只考虑实体以快速完成):

使用此模型,当您的用户验证其测试时,您可以进行如下一次迭代:

for(Answer* a in answers)
{
   Question *q = a.question;

   if(a.isCorrect)
   {  
      // ... increment counter by questions ..
      // ... check with corresponding question by using variable 'q'
   }
}

我建议您添加一个新的实体
Category
,它可能有助于在UI中向用户显示表单(例如使用
UITableView
)。这样,表的数据源将显示类别列表,分区标题将显示类别名称,单元格将显示问题

您提出的模型确实反映了您的假设,但正如其他人所指出的,测试问题和用户答案是不必要的,因为它们分别对应于测试和用户

但是(正如其他人所说的那样),我会重新考虑是否每个用户只需要一个测试,每个测试只需要一个用户。事实上,您的假设包括“每个用户每次测试都有一组答案”,这意味着可能会有多个测试。为了适应这一点,我将添加一个中间实体,即尝试,它将记录用户、测试、日期等的详细信息。通过从用户到尝试以及从测试到尝试的一个或多个关系,您可以允许a)多个用户进行同一测试,以及b)任何用户进行多次尝试,要么尝试不同的测试,要么多次尝试相同的测试。我还将向Test添加testName属性,向Question添加questionTitle属性,以便在tableViewCells中使用,等等

虽然不在您的假设中,但您的模型当前要求任何一个问题只能出现在一个测试中。我建议改变这一点:然后你可以通过从一组问题中随机选择来生成不同的测试。但这确实需要另一个实体“TestQuestionDetails”,它与Test和Question有一个或多个关系,可以记录问题编号等细节。同样,正如其他人所建议的,我会将问题的category属性转换为一个单独的实体。这将允许您添加一个属性,例如“sortIndex”,以便您可以根据需要对类别进行排序(您可能不希望按字母顺序排序)

最终结果如下所示: