Database design 为长问卷设计数据库

Database design 为长问卷设计数据库,database-design,Database Design,嘿,我为一个困扰我很长一段时间的问题挠头了 基本上,我有一个很长的在线问卷,我不太确定我应该如何设计mySQL数据库来存储答案 下面是我的问题: 我应该为每个人(参加调查的人)创建一行吗 有许多家长/孩子的问题(例如,如果回答是,则 回答以下问题,否则忽略)。他们怎么办 对于一个问题,此人可以回答多个答案。如何 处理他们 我的想法是创建一个表,每列都是问题。如果有家长/孩子的问题与调查对象无关,则只会将其保留为空白。对于可以有多个答案的问题,我将创建n列(其中n表示可能的答案数量) 你觉得怎么样

嘿,我为一个困扰我很长一段时间的问题挠头了

基本上,我有一个很长的在线问卷,我不太确定我应该如何设计mySQL数据库来存储答案

下面是我的问题:

  • 我应该为每个人(参加调查的人)创建一行吗
  • 有许多家长/孩子的问题(例如,如果回答是,则 回答以下问题,否则忽略)。他们怎么办
  • 对于一个问题,此人可以回答多个答案。如何 处理他们
  • 我的想法是创建一个表,每列都是问题。如果有家长/孩子的问题与调查对象无关,则只会将其保留为空白。对于可以有多个答案的问题,我将创建
    n
    列(其中
    n
    表示可能的答案数量)

    你觉得怎么样?这是否合适,或者是否有更好的方法来设计数据库


    谢谢

    对于我来说,每一列都是问题听起来是个坏主意,因为很难更改/添加问题。更改数据库结构应该很少进行

    表格:答案

    对于答案,我想说的是一个包含所有答案的表,其中包含以下列:

    • 人员id(回答此特定问题的人员)
    • 问题id(这一行回答了哪个问题)
    • 答案(答案本身,可以是字符串/数字)
    如果这个人对同一个问题回答了不止一个答案,我会为这两个答案分别放两行。如您所见,每个答案都有一行(由一个人填写)。因此,如果我们总共有10个问题,每个问题有两个人回答一次,那么表中就有20行了

    如果一个人没有回答其中的一个问题,那么你就不需要为这个问题+这个人排一行

    表格:问题顺序

    在我看来,你还有另一个要求,那就是控制问题的流程——哪些问题在哪个问题之后。我们需要将此流保存在另一个表中,其中包含以下列:

    • 问题id(当前问题)
    • 回答条件(字符串\数字,取决于您的问题)
    • 下一个问题id
    在这个表格中,你掌握了所有问题之间的联系。如果问题1总是引出问题2,则将
    [1,NULL,2]
    -在这种情况下,NULL表示所有可能的答案。如果问题2仅在回答“是”时才引出问题3,则将
    [2,“是”,3]
    。如果问题2仅在回答“否”时才引出问题4,则将
    [2,“否”,4]
    以此类推

    表格:问题

    另一个可能有用的表格是问题表格,它提供了有关问题可以接受的内容的更多信息。例如,如果您想知道哪些问题支持多个答案,请使用以下列:

    • 问题id(我们正在讨论的问题)
    • 支持多个答案(bool)

    在这个表中,每个问题通常有一行。

    您需要研究关系数据库设计和数据库规范化。不要把所有的东西都放在一张表中,否则你会有一场噩梦。这是nosql dbs、mapreduce和函数式编程的一个很好的候选者;)对于RDBMS,您所做的被称为“一个大的电子表格”,被认为是一种糟糕的方法。