这是我当前的测验数据库结构:
为了测试和简单起见,我只提出了 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 个问题,可能效率不高。 任何帮助将不胜感激。
最佳答案
我会根据您拥有的表创建两个表:
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 语句将数据插入到新结构中,就像我上面向您展示的那样。
关于php - 测验的数据库结构是什么样的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18730488/