将测验替代品保存为JSON字符串或单个行?

时间:2012-10-19 12:49:49

标签: php mysql json database-design

我正在做一个测验。每个问题都包含一个问题,三个备选方案,其中一个是正确的。服务器应该输出HTML(而不是JS要解析的JSON),并且用户选择答案。

我怀疑的原因是进行测验的人是通过JSON发送替代品。如果您想稍后编辑任何替代方案,只需解析JSON,进行更改并将其发送到服务器。然后服务器将只更新备选方案“cell”。

但是,当用户参加测验时,服务器必须运行数组才能找到正确的答案。如果答案存储在他们自己的分隔行(多对多)中,则服务器可以只查询正确的答案。

除此之外,如果使用多对多关系,JSON将导致在TEXT列中保存备选项与许多小型VARCHARS相比。

最有效的方法是什么? (速度) 什么是最方便的方式,也是最常用的方式?

1 个答案:

答案 0 :(得分:1)

好吧,我会说你的桌子应该是这样的:

+------+------------+--------+--------+--------+--------------+
|  ID  |  Question  |  Ans1  |  Ans2  |  Ans3  |  CorrectAns  |
+------+------------+--------+--------+--------+--------------+
| PKey |    text    |  text  |  text  |  text  |     text     |
+------+------------+--------+--------+--------+--------------+
|   1  |    π = ?   | 3.1415 | 2.2465 | 5.6598 |     3.1415   |
+------+------------+--------+--------+--------+--------------+

您的查询将是:

SELECT (CorrectAns = %enteredanswer%) FROM QuizTable WHERE ID=%questionid%

很容易将json转换为此表,反之亦然。

编辑:对于未定义数量的替代方案:

您可以拥有Question表和Options表,如下所示:

Question:
+-------+------------+---------------+
|  QID  |  Question  |  CorrectAnsID |
+-------+------------+---------------+
|  PKey |   text     |  FKey,integer |
+-------+------------+---------------+
|   1   |   π = ?    |        2      |
+-------+------------+---------------+

Options:
+-------+--------------+--------------+
|  OID  |  OptionText  |  QuestionID  |
+-------+--------------+--------------+
|  PKey |    text      | FKey,Integer |
+-------+--------------+--------------+
|   1   |    3.5600    |      1       |
+-------+--------------+--------------+
|   2   |    3.1415    |      1       |
+-------+--------------+--------------+
|   3   |    3.4567    |      1       |
+-------+--------------+--------------+
|   4   |    3.7894    |      1       |
+-------+--------------+--------------+
|   5   |    3.9874    |      1       |
+-------+--------------+--------------+

这可能比json方法更快,但实现起来更困难(连接和写东西),所以如果它是一个快速,小规模的项目,我会选择json方法。