我正试图在django中做一个简单的“填空”类型的考试,并想知道什么是设计数据库的最佳方法。
示例:“9是4和5之间的总和,或3和6。”
在考试期间,上述句子显示为“__是__和_ 的总和,或_ 和__。”
显然这个问题的答案数量不限,但假设上述数字是唯一的答案。但问题是,你可以切换4和5的位置,或3和6的位置,仍然得到正确的答案。此外,空白的数量是未知的,因此它可以是1或更多。
答案 0 :(得分:0)
我会选择类似的东西。首先定义一个问题表:
Question
--------------------------
Id Text
1 9 is the sum of 4 and 5, or 3 and 6
...
然后保存隐藏子串的位置,让我们称之为另一个表中的字段:
QuestionField
--------------------------
Id QuestionId StartsAt EndsAt Set
1 1 0 1 1
2 1 16 17 2
3 1 22 23 2 # NOTE: Is in the same set as QuestionField #2
...
此表允许您通过查询问题表来检索字段的实际值(例如,条目1引用第一个问题中的值'9'。
“Set”列包含此字段所在的“set”的标识符,其中同一组中的字段可以相互替换。填充它时,您必须确保所有可以互相替换的问题都在同一个集合中。只要它是唯一的,集合的实际数量无关紧要。但是让它等于集合中某个元素的ID是有意义的。