示例问题类型到目前为止:
多选单答(想想单选按钮)
多项选择多个答案(想想复选框)
匹配(现在有许多可能的选择排列)
我想将它们存储在一个数据库结构中,可以在将来用于这些和更多类型的问题,所以我正在考虑一种方法,它可以...可扩展?
现在我有(你的建议不必受此约束):
一个问题可以有很多答案.一个用户/问题对可以有许多ChosenAnswers.
然而,据我所知,我不能很好地使用匹配,而且我也不是100%确信它能够轻松地用于多个答案,很容易意味着在计算人员总分时所需的逻辑量最少等
任何人都可以想到一个设计,它可以让我使用这三种类型的测验问题以及添加未来的问题吗?如果你愿意,我需要一些灵感,一种范式转换......
未来问题类型的一个例子可以是"将这些事物列表按正确的顺序排列"......等等.
考虑到所有这些不同的可能问题类型,必须有一种方法,无论多么复杂,同时仍然让我使用一种相当直接的方法来计算测验的总分数以用于报告目的,等等.
如果有任何我缺少的细节,请在这里的评论中告诉我,但最好假设我甚至没有考虑过你正在考虑的细节,因为我已经把我在问题中的所有内容都放了,但我会根据要求增加清晰度.
在下面的设计中,我们将在问题表中使用一系列标志来指示它是什么类型的问题.我们还指出了问题的严重程度.答案表通过外键链接到问题表.complet测试表将保存所进行的complet测试的结果.每个用户只允许进行一次不完整的测试.在不完整的测试表中,我们将问题链接回问题表(我错过了关系线),这将链接到可能的答案,我们记录用户在不完整测试表的字符串列中给出的答案.
单个答案就像带有约束的多个答案一样,因此可以轻松地将它们存储在同一个表中。所以你所拥有的已经对这两者都适用了。
不过,我建议不要尝试过多地整合,因为如果您需要添加另一种类型的问题,您很可能最终不得不重构您的范式,这不仅会让旧类型感到头疼,而且还会让更多人感到头疼,或者同样,为新类型而努力。即为匹配类型问题添加专门的表格。
您始终可以使用视图组合结果。这样,单个类型很容易维护,但组合结果也很容易生成。让数据库来处理复杂性,而不是你自己的聪明才智。(如果您不同意这一点,您不妨编写一个自定义引擎,而不是首先使用 SQL。:-) )