SQL - 规范化包含多个选项的表

问题描述 投票:-1回答:2

我试图创建一个包含表的数据库,该表将有多项选择测验的答案。我的问题是,为每个问题创建一个列是否正常?

我的意思是,如果我有100个问题,我是否为每个人创建了一个列?

对此最好的方法是什么?

谢谢

mysql database database-normalization
2个回答
0
投票

您可以参考此链接表:用户

  • user_id自动整数
  • regtime datetime
  • 用户名varchar
  • useremail varchar
  • userpass varchar

表:问题

  • question_id自动整数
  • 问题varchar
  • is_active enum(0,1)

表:Question_choices

  • choice_id自动整数
  • question_id整数
  • is_correct_choice枚举(0,1)
  • 选择varchar

表:User_question_answer

  • user_id整数
  • question_id整数
  • choice_id整数
  • is_correct枚举(0,1)
  • answer_time datetime

https://www.quora.com/What-is-a-good-database-schema-using-MySQL-for-storing-multiple-choice-questions


0
投票

为每个问题创建一行是正常的(在普通意义上和数据库规范化意义上)。在另一个表中为每个答案创建一行。

阅读数据库规范化。

您的question表可能包含具有此值的列

question_id   question_text
          1   What color is the sky?
          2   What number comes after 1?

并且您的answer表可能包含具有此值的列

answer_id   question_id  correct  answer_text
        1             1        0  Green
        2             1        1  Blue
        3             1        0  Orange
        4             2        0  -2
        5             2        1  2
        6             2        0  42
        7             2        0  π

通过这样的设计,您可以根据需要添加任意数量的问题和答案,而无需更改表格的结构。

您可以检索正确的答案,例如,对于这样的每个问题

   SELECT question_text, answer_text
     FROM question
     JOIN answer ON question.question_id = answer.question_id
    WHERE answer.correct = 1
© www.soinside.com 2019 - 2024. All rights reserved.