测验数据库设计

use*_*788 5 mysql database-design

我目前正在研究一个测验系统,并试图首先进行数据库设计。我已经阅读了一些关于不同测验的主题,但它们在某些部分都是独一无二的。

系统将使用带有 PHP 的 MySQL 数据库。

这个测验系统的目标:

  • 能够在里面有不同的“测验”
  • 完整测验和每个问题的时间轨迹(提前考虑人与人之间的挑战部分)
  • 能够在测验中处理很多参与者
  • 拥有良好的基础,因此可以使用新的、更复杂的功能进一步开发,而无需重建整个系统(即数据库设计)。

到目前为止的数据库设计图像。我已经在每个“关系”上写了这个字段。

我很确定其中的大部分内容都是不言自明的,但我已经对不太明显的内容添加了注释。

至少在一开始它不会是任何“现场”比赛。更有可能的是,您进行测验,获得时间,然后您可以将链接发送给朋友并参加比赛。但我还在考虑那部分。

我意识到,与将所有内容放在一两个表格中的基本测验设计相比,使用此设计获得完整结果等需要更多的工作。但是我尝试将它分成不同的表,以便能够更好地扩展它并使其更复杂以备后用。

我正在考虑添加某种支持,以便一个问题也可以用于不同的测验。只是在想我应该如何做到最好。

这其中的一个关键功能还在于能够快速加载所有内容。

欢迎任何提示!

数据库设计

wp_quiz(这里我们存储所有不同的测验)

  • 测验编号
  • 测验名称
  • 测验文本
  • quiz_site(内部事物,对测验本身并不重要)
  • quiz_difficulty

wp_quiz_questions

  • quiz_question_id
  • 测验编号
  • quiz_question
  • quiz_question_difficulty
  • quiz_question_multianswer(如果这是一个有多个正确答案的特殊问题,那么我们使用例如选择而不是单选按钮)。

wp_quiz_question_answers

  • quiz_question_answer_id
  • quiz_question_id
  • quiz_question_answer
  • quiz_question_answer_correct

wp_quiz_participants

  • quiz_participant_id
  • 测验编号
  • quiz_participant_name
  • quiz_participant_email
  • quiz_participant_userid
  • quiz_participant_time_start
  • quiz_participant_time_end

wp_quiz_participant_answers

  • quiz_participant_answers_id
  • 测验编号
  • quiz_question_id
  • quiz_participants_id
  • quiz_question_answer_id
  • quiz_question_time_start
  • quiz_question_time_end

Duf*_*ffy 1

总体来说相当不错,我建议只做一些小的改变:

  • quiz_id 在 wp_quiz_participant_answers 表中是多余的,您可以通过 JOIN 到 wp_quiz_questions 或 wp_quiz_participants 表来获取它

  • 如果您有任何计划允许类似登录或以同一用户身份继续参加测验的功能,您可能应该将用户分解到 wp_quiz_participants 引用的他们自己的表中。看起来您可能正在考虑 quiz_participant_userid 的思路?

性能将基于您的查询,密切关注性能并在必要时添加索引。