Database design 数据库设计和应用程序逻辑帮助

Database design 数据库设计和应用程序逻辑帮助,database-design,Database Design,我正在尝试建立一个数据库,供多个用户进行多项选择测试。我很难设置数据库和应用程序逻辑 这是我认为应用程序应该如何运行的: 用户开始测试并回答任意数量的问题(问题应随机选择) 用户看到的问题不应该是以前由同一用户正确回答的问题 以下是我如何设置数据库: 因此,我的问题是: 我的数据库是否正确设置,以满足上述要求 向用户显示问题的最佳方式是什么(记住上述要求)?我是否应该在一个数组中获得正确回答的所有问题,然后在另一个数组中获得所有现有问题,并从第二个数组中排除第一个数组,然后洗牌生成的数组?我认

我正在尝试建立一个数据库,供多个用户进行多项选择测试。我很难设置数据库和应用程序逻辑

这是我认为应用程序应该如何运行的:

  • 用户开始测试并回答任意数量的问题(问题应随机选择)
  • 用户看到的问题不应该是以前由同一用户正确回答的问题
  • 以下是我如何设置数据库:

    因此,我的问题是:

  • 我的数据库是否正确设置,以满足上述要求
  • 向用户显示问题的最佳方式是什么(记住上述要求)?我是否应该在一个数组中获得正确回答的所有问题,然后在另一个数组中获得所有现有问题,并从第二个数组中排除第一个数组,然后洗牌生成的数组?我认为这种方式根本没有效率

  • 谢谢

    只要你只有一次测试,只要你不想记录用户的答案,不管他们答对与否,你的模式几乎可以工作。我看到的一个问题是,我看不到正确答案记录在哪里。系统如何知道用户是否选择了正确的答案

    此外,有些人可能会有点担心你的问题表有不规范的答案。另一种方法是使用如下答案表:

    answers
    ( id,
      question_id,
      sequence,
      answer_value
    )
    
    这样做的好处是,每个问题可以有任意数量的答案,如果需要更多答案的问题,您不需要编造额外的错误答案或更改系统

    还请注意,如果您使用这种方法,那么您的问题表还应该指示哪个答案是正确的,例如“correct_answer_id”-如果您在数据库中实现了引用完整性,由于鸡和蛋的问题,这种类型的关系很难管理,因此,您需要一些应用程序代码来确保每个问题都有答案,并且它的答案不是针对不同的问题

    您在帖子中没有提到这一点,但是
    stats.is_responsed_\u correct
    允许您避免向用户显示他们做错了的问题以及他们做对了的问题。如果您只想知道用户正确回答了哪些问题,并准备多次向他们显示相同的问题,直到他们正确回答为止,那么您实际上不需要“is\u responsed\u corrective”属性。相反,交叉口记录的存在告诉您问题的答案是正确的

    在选择问题方面,有两种方法可以解决。如果你的问题比任何一个用户回答的问题都多,那么你可以随机选择一个问题,检查他们是否碰巧回答了,如果是的话,回去换一个。如果问题集比答案集大得多,那么发生冲突的概率很低,你应该没事


    如果你的问题集比你的答案集大不了多少,你可以把没有回答的问题列成一个工作列表。这将涉及一个交叉表,其中包含用户与每个问题的配对。当用户首次注册时,您可以构建一次。当您提出一个问题时,您可以从该工作列表表中与该用户相关的问题中随机选择该问题。当用户正确回答问题时,您将删除交叉点记录,这样就不会再次询问该问题。这是非常有效的,但在从工作列表表中随机选择一个问题之前,需要数据库调用来计算特定用户的未回答问题数。

    谢谢您的回复。你是对的,我应该为正确答案添加一个字段。另外,我也不太明白你在第三段底部所说的“交叉点记录的存在”是什么意思。你能再解释一下吗?“交叉点记录的存在”=仅仅在统计表中有一条记录就足以表明用户回答了这个问题。如果您只记录用户正确回答问题的时间,那么is_responsed_correct标志将始终为true,因此不需要这样做。另一方面,如果你存储了每个答案——正确和错误——那么这个标志毕竟是有意义的。