php - 测验的数据库结构是什么样的?

标签 php mysql database

这是我当前的测验数据库结构:

为了测试和简单起见,我只提出了 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/

相关文章:

php - 传递给 Foo::__construct() 的参数 1 必须是 Psr\Log\LoggerTrait 的实例,给出的 Mock_Trait_LoggerTrait_65811a25_bdddd884 的实例

c# - 将一维数组拆分为 2 个数组

sql - 将一个数字分成相等的范围并使用 select for oracle 数据库作为行返回?

php - 检索并绘制一段时间内的数据

mysql - 计算日期之间的差异

sql - 如何在 MySQL 中按 SUM() 进行排序?

MYSQL 函数/过程

javascript - 在 MySQL 中使用多数据库查询与单数据库查询的比较

php - WordPress Subscribe2 插件在发送电子邮件时转义博客名称中的字符

php - MySQL Query AND IN (select.... - 需要帮助澄清它是一个子例程