将测试结果保存到数据库:保持数据库整洁

时间:2013-03-26 09:49:36

标签: php mysql

我使用Wordpress,jQuery和PHP创建了一个测试系统,效果很好。我没有太多经验的领域是mysql数据库。

我不确定如何以干净整洁的方式保存结果。

我要保存的内容如下:

  1. 用户名。
  2. 测试名称。
  3. 问题。
  4. 答案。
  5. 得分。
  6. 通过/失败。
  7. 第1,2,5和2点6是相当直接的保存数据。困惑伴随着问题和答案。

    如何以完整的方式将这些保存到mysql数据库?

    假设有10个问题,每个问题都有多个选择答案,如何保存数据库中的每个问题但是将其链接到填充它们的用户?我不确定如何保持数据库整洁,这很快就会失控。

    将来我可能想对这些问题和答案进行一些搜索。

3 个答案:

答案 0 :(得分:4)

“整洁”应该让你想到“正常化”。

开始考虑关系,暂时不用担心表格。你已经阐明了其中一些:

  • 问题有一个或多个答案
  • 给定问题的一个或多个答案可被视为“正确”
  • 测试有一个或多个问题
  • 测试有一个分数和一个名称
  • 用户可以进行零次或多次测试
  • 可以由零个或多个用户进行测试
  • 一个问题可以出现在零个或多个测试中(?)

一旦你完成了那些分类,表格相对容易描述。

答案 1 :(得分:2)

您需要规范化数据库结构。

**Table: users**
id - int
username - varchar
password - varchar
active - enum (y,n)

**Table: questions**
id - int
question - varchar/text

**Table: answers**
id - int
question_id - int (foreign key questions.id)
answer - varchar/text
is_correct_anser - enum (y, n)

**Table: test_master**
id - int
test_name - varchar/text
pass_score - int (minimum score required to pass the test)

**Table: test**
user_id - int (foreign key to users.id)
test_id - int (foreign key to test_master.id)
question_id - int (foreign key to questions.id)
answer_id - int (foreign key to answers.id)

根据以上表格,您可以按标准化方式存储所有必需信息。请注意,规范化并不总是有用,这取决于您的应用程序的要求。一旦完成测试,将总得分与user_id和test_id一起存储在单独的表中也是一个更好的理想,因为这将避免多个表上的连接。

答案 2 :(得分:0)

创建一个表格问题,你有问题,问题和选择。在ohter表中,您只需要保存question_id,choice,username,score,testname等。 question_id将是主要的关键问题表。