以下是我当前的测验数据库结构的样子:
为了测试和简单,我只提出了3个问题。 这就是我的表(测验)的样子:
| id | score | q1_answered | q2_answered | q3_answered |
--------------------------------------------------------
| 1 | 210 | 0 | 1 | 0 |
| 9 | 380 | 1 | 0 | 1 |
| 5 | 210 | 1 | 1 | 1 |
--------------------------------------------------------
每个问题列的数字从0到1, 0 表示尚未回答, 1 表示已正确回答。
我想知道你们中是否有人想要创造一个更好的结构或更好,更有效率。 是否有一种有效的方法为已解决特定问题的用户添加时间戳?
例如说:如果用户回答问题1,将记录答案的时间并显示。
这种结构可行,但我一直认为如果我再增加50个问题可能效率不高。 任何帮助将不胜感激。
答案 0 :(得分:2)
我会根据你的表创建两个表:
scores
sID score testID
1 210 1
9 380 1
// etc etc
quests
sID testID question answer anstime
1 1 1 0 1231237128961
1 1 2 1 1231237128964
1 1 3 0 1231237128968
9 1 1 1 1231237128961
9 1 2 0 1231237128968
基本上,您正在以一种方式规范化数据,您可以轻松添加更多问题而无需以任何方式修改表格,您仍然可以使用一个很好的干净表来保存易于加入的分数
然后你也可以做更多有趣的查询,比如有多少人在某个时间回答了问题3,很好地汇总了数据,当然,如果要显示所有结果,仍然可以将其加入分数特别ID。
我还在表中添加了两列名为testID的列。这样,您不仅可以跟踪一个测试的多个用户,还可以跟踪多个测试中的多个用户。你将能够看到学生在测试过程中是否有所改善,或者随着学科的继续而逐渐恶化。
编辑:从你的结构中复制数据会有点烦人,但这应该让你开始至少在路径上:
insert into quests (sID, question, answer)
select sID, testID, q1_answered from yourTableName
您可以使用原始表格上的select语句将数据插入到新结构中,如上所示。
答案 1 :(得分:0)
简而言之,您为问题定义了一个表,并为用户提供了答案:
问题: QuestionID,QuestionName,......
回答: AnswerID,UserID,QuestionID,AnswerGiven,AnswerCorrect,DateAnswered
这样,如果添加新问题,则无需更改表结构。
答案 2 :(得分:0)
我不担心50个问题的效率。只是有一些有趣的编程。尝试一下。如果您有一百万个问题或数十万个问题,您可能会开始考虑效率问题。电脑真的很快。