我正在尝试为多个用户设置的多项选择测试设置数据库。我在设置数据库和应用程序逻辑时遇到了困难。
这就是我看到应用程序的行为:
以下是我设置数据库的方法:
所以我的问题是:
由于
答案 0 :(得分:0)
只要您只有一个测试,并且只要您不想记录用户的答案,只要他们是否正确,您的架构几乎可以正常工作。我看到的一个问题是我无法看到正确答案的记录位置。如果用户选择正确答案,系统将如何知道?
另外,有些人可能会对你的问题表有一点担心,这些表有非标准化的答案。另一种方法是使用这样的答案表:
answers
( id,
question_id,
sequence,
answer_value
)
这样做的好处是,每个问题你可以得到任意数量的答案,如果需要更多答案的问题,你不需要补充额外的错误答案或改变你的系统。
另请注意,如果您使用此方法,那么您的问题表还应该指出哪个答案是正确答案,例如“correct_answer_id” - 如果您在参与者中实施了参照完整性,那么这种类型的关系很难管理。数据库,由于鸡和蛋的问题,所以你需要一些应用程序代码来确保每个问题都有答案,答案不是针对不同的问题!
您在帖子中没有提到这一点,但stats.is_answered_correctly
可以让您避免向用户显示他们出错的问题,以及他们正确的问题。如果您只想知道用户哪些问题是正确的,并且准备多次向他们展示相同的问题,直到他们做对了,那么您实际上并不需要“is_answered_correctly”属性。相反,仅仅存在交集记录就会告诉您问题已得到正确回答。
在挑选问题方面,有两种方法可以解决问题。如果你有比任何单个用户都要回答的问题更多的问题,那么你可以随机选择一个问题,检查他们是否碰巧已经回答了问题,如果是,请返回并获得另一个问题。如果问题集比答案集大得多,则碰撞概率非常低,你应该没问题。
如果您的问题集不比您的答案集大得多,您可以改为制作未回答问题的工作清单。这将涉及包含用户与每个问题的配对的交集表。当用户首次注册时,您将构建一次。当您提出问题时,您可以从此工作清单表中与该用户相关的问题中随机选择一个问题。当用户获得正确的问题时,您删除交集记录,以便不再询问问题。这非常有效,但在从工作列表表中随机选择一个之前,它需要数据库调用来计算特定用户的未答复问题的数量。