一个测验的MySql数据库设计

Mar*_*cus 6 php mysql

我正在使用php和mysql进行在线测验,需要一些帮助来决定如何设计数据库以优化插入问题/答案并为测验选择问题.该表将分别包含80个问题,包括4个可能的选项和正确的答案.

从数据库中检索问题和选项时,我将随机选择25个问题及其选项.

为所有问题,选项和正确答案制作一个专栏是否更好?例如:

ID | Q | OPT1 | OPT2 | OPT3 | OPT4 | ANS
Run Code Online (Sandbox Code Playgroud)

或者为每个问题,选项和正确的答案制作专栏会更好吗?例如:

Q1 | Q1_OPT1 | Q1_OPT2 | Q1_OPT3 | Q1_OPT5 | Q1_ANS | Q2 | Q2_OPT1 | Q2_OPT2...
Run Code Online (Sandbox Code Playgroud)

Ree*_*e45 11

最好将可能的答案存储在一个单独的表中.这使您可以在每个问题中获得任意数量的答案,而不仅仅是4.它还允许问题具有不同数量的答案.如果您有多个测验,您可能还需要一个Quizes表.

Quizes:
  id
  name

Questions:
  id
  quiz
  prompt

Answers:
  id
  question
  prompt

QuizResult (someone taking a quiz)
  id
  quiz
  // other information about the quiz taker, possibly including the time
Run Code Online (Sandbox Code Playgroud)

现在正确答案的事情变得更加棘手.我更喜欢这里更高的实现:

每个问题都有一个值,每个答案都有价值

我最近与您合作的系统可以为每个问题和每个答案分配一个分值.不正确的答案通常得到0,正确的答案得到了全额.您也可以使用此方法获得部分正确的答案.这是我要采用的方法.

您可以去说每个问题值10分,或者您可以为不同的问题分配不同的权重:

Questions:
    id
    quiz
    prompt
    value (you can make this question worth more or less)

  Answers:
    question
    prompt
    value (you can make this answer worth more or less)
Run Code Online (Sandbox Code Playgroud)

将正确答案存储在答案表中

一个更简单(但不太健壮)的解决方案是简单地说出Answers表中哪个答案是正确的.

Answers:
    question
    prompt
    is_correct
Run Code Online (Sandbox Code Playgroud)

将正确答案存储在问题表中

我不推荐它.创建问题时,在插入问题之前,它将没有正确的答案.这意味着至少有3个查询才能正确提出问题.如果您使用外键依赖项,这将很快变得烦人.