【问题标题】:Storing more than one string in a MySQL Database Table在 MySQL 数据库表中存储多个字符串
【发布时间】:2013-03-18 20:50:44
【问题描述】:

在我提出问题之前,我只想感谢昨天回答我问题的所有人-> Countdown using javascript

想法:

我使用 php 创建了一个测验,但我想创建一个 MySQL 数据库并在其中存储一个包含所有问题、答案和多项选择的表。

问题:

由于测验是多项选择,我不知道如何将多项选择选项存储在表格中。我可以存储选项并用特殊字符分隔每个答案,让 php 获取字符串并分隔选项吗?

例如:问题:你最喜欢的颜色是什么?选项:蓝色=红色=紫色=黄色。(数据库视图)

你们认为这样的最佳做法是什么?

【问题讨论】:

  • Kingkero有正确答案,进一步阅读搜索“关系数据库设计”和“规范化”
  • @DavidB 他的答案的标准化在哪里?它将如何处理具有多个答案的问题?
  • 一般来说,如果您认为在表中使用逗号分隔值是个好主意,那么您应该阅读有关关系数据库设计的内容,如果您对此有所了解,那么您应该阅读有关数据规范化的内容。如上所述,kingkero 有答案,我试图提供一些有用的进一步阅读。您对您的评论有何贡献?

标签: php html mysql phpmyadmin


【解决方案1】:

可能有很多可能的架构设计,但我的建议是这样的:

永远不要在表格中存储以逗号分隔的值。

此表包含测验。

测验表

  • 测验 ID (PK)
  • 其他栏目..

这包含每个测验的问题。

问题表

  • 问题 ID (PK)
  • 问题详情
  • 测验ID (FK)
  • 其他列...

这包含了答案。

答案表

  • AnswerID (PK)
  • 回答详情

这包含每个测验中每个问题的正确答案,或者换句话说,这是答案的关键。

Question_Answer_Correct 表格​​

  • QuestionID (FK) -- 也是带有 AnswerID 的复合主键
  • AnswerID (FK)

这包含用户列表。

用户表

  • 用户 ID (PK)
  • 用户名
  • 其他列...

这包含用户对指定问题的回答。这里没有QuizID,因为问题已经连接到测验表上。

User_Answers 表

  • 用户 ID (FK)
  • 问题 ID (FK)
  • AnswerID (FK)

【讨论】:

    【解决方案2】:

    表格:

    测验

    quiz id (pk)
    quiz info (other columns)
    

    问题

    question id(pk)
    quiz id
    question text
    

    答案

    answer id(pk)
    question id
    answer text
    

    要显示给定的问题,请加入测验、问题和答案。

    编辑:您可以为“正确/错误答案 (0/1)”添加一列,或者有另一个表格:

    解决方案

    解决方案 id(pk)
    问题编号
    答案编号

    我没有将“正确答案”放在answers 表中,因为这不是很好的标准化。

    【讨论】:

      【解决方案3】:

      你会有一个questions 表,如下所示:

      id  |            question
      0             Do you even lift?
      

      id 将是 INT(11) PRIMARY_KEY AUTO_INCREMENTquestion 将只是 TEXT。然后,您将有一个answers 表:

      id  | question_id | answer
      0          0         Yes
      1          0         No
      2          0         Maybe
      

      这里,question_id 指的是questions 表中问题的 ID。这些答案都属于一个问题。这称为Has many 关系,因为一个问题有多个答案。

      这是它通常的做法。实现它并不难,即使您没有使用框架(其中大多数为您完成工作)。

      希望对你有帮助

      【讨论】:

        【解决方案4】:

        有几种方法可以解决这个问题:

        • “正确”的方法是创建另一个表(这样您就有一个名为“questions”的表,每个表都有一个唯一的 ID,另一个称为“answers”,每个表都有问题 ID)
        • “简单”的方式,即使用 JSON(参见 json_encodejson_decode ),它负责在字段中使用特殊字符等

        【讨论】:

          【解决方案5】:

          简单地说,创建两个表:

          • 问题

            question_id,问题

          • 答案

            answer_id、question_id、答案

          现在,您可以使用 question_id

          链接这两个表

          【讨论】:

            【解决方案6】:

            我认为最佳做法是使用多个表。一个用于问题,一个用于答案。 answer 表将包含 question_id 以及是否为正确答案的标志

            可能是这样的

            TABLE questions
            FIELDS: id, text
            
            TABLE answers
            FIELDS: id, question_id, text, correct
            

            将一个字段用于所有答案的问题在于,您可能会不小心使用用于拆分答案文本的字符

            【讨论】:

            • 是的。不要将编码值存储在单个数据库字段中,这会让你在做报告时生活得像地狱一样。
            猜你喜欢
            • 1970-01-01
            • 2012-02-17
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2013-03-14
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多