2014-09-27 68 views
4

我正在构建一个iOS应用程序进行测试,我想在继续之前确定我的模型。核心数据模型测试采取iOS应用程序

我发现这个职位非常有帮助:

What mysql database tables and relationships would support a Q&A survey with conditional questions?

我只是想关于执行核心数据的简化版本一些建议。

下面是我的一些假设:

  • 每个用户都可以采取一个测试
  • 每个用户都有一组采取
  • 每个测试每个测试的答案有一个用户
  • 每个问题都有很多答案

这是我的核心数据模型:

enter image description here

问题:

  • 这是否反映了模型我的假设正确?
  • 是否需要Test_QuestionsUser_Answers
    • 我理论上可以在TestQuestion之间直接有关系吗? Test -->> Question
  • 有关改进的任何意见将不胜感激。

回答

2

您应该能够删除TEST_QUESTIONS和USER_ANSWERS表。目前TEST_QUESTIONS和TEST与USER_ANSWERS和USER之间存在一对一的映射关系,这些映射确实没有任何用处。

从理论上讲,你也可以将TEST和USER结合起来,因为它们也是一对一的,但有人可能会认为它们是单独的问题,应该每个都有一个表。

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

如果是这样,您可以进行另一种简化。您可以在ANSWER表中添加一个字段,例如“wasSelectedByUser”,并删除USER和ANSWERS之间的关系,因为您可以从USER导航到TEST到QUESTION到ANSWER并确定用户选择的内容。

Possible simplification

0

您可以使用您定义的模型,但是当它涉及到验证阶段,要知道如果用户已通过测试它可能是一个有点棘手,所以我建议你做如下简化(我没有考虑到领域,但只有实体很快使它):

Another model

在这种模式下,当用户确认他的测试,你可以去像这样的迭代:

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,它可能有助于在用户界面中向用户显示表单(例如使用UITableView)。有了这个你的表的数据源将类别的列表,你的部分的标题将是你的类别的名称,你的单元格将成为问题。

0

你提出不反映你的假设,但正如其他人所指出的模式,Test_questions和User_Answers是不必要的,因为它们映射一个一个分别测试和用户。

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

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

最终的结果看起来是这样的:

DataModel

相关问题