【问题标题】:What's an effecient way to store a questionnaire in a database?将问卷存储在数据库中的有效方法是什么?
【发布时间】:2011-06-05 07:46:57
【问题描述】:

由于调查问卷总是会发生变化,而且问题本身可能很长,因此将问题用作列名似乎很愚蠢。 是否有任何惯例或经过验证的方法可以将问卷存储在数据库中?

我正在考虑有一个带有 (Question-ID, Question) 的表,然后是第二个用于问题 ID 和答案的表。但是这个解决方案可能太慢了,因为需要第三次加入才能加入特定用户的问题。

【问题讨论】:

    标签: database join scalability


    【解决方案1】:

    加入有什么问题?这就是关系数据库的全部意义,即联接。

    将问题存储在一个表格中。

    将问题答案存储在另一个表中。

    如果答案是预定义的,并且在多个问题中很常见,则将常见答案存储在他们自己的表中,并创建另一个表,其中包含 QuestionID 和 AnswerID。

    不要害怕连接,它们是关系数据库的一部分。如果没有连接,您只是在处理平面文件。

    【讨论】:

    • 确实如此。但是为什么现在每个人都对加入大喊大叫?
    • @Absolute0 - 他们可能是不懂数据库的人。你为什么要对关系数据大喊大叫,这才有意义!给我指点这些愤怒的动物好吗?
    • @Absolute0 - 说真的,没有连接,你真的会留下没有意义的数据。它没有任何关系,就像你生来就没有父亲(上帝是个坏例子)。但是有些人可能会过度规范他们的数据,这反过来会影响性能。但这完全取决于开发人员,因为他/她最终比我们更了解他们的数据。使用关系数据,我可以通过获取一个实体/对象并将其以某种方式与另一个实体相关联来理解问题。
    【解决方案2】:

    我认为最好的答案是对问卷所涉及的信息进行建模。不要尝试对问卷本身进行建模 - 问卷只是用于收集数据库内容的手段。

    【讨论】:

      【解决方案3】:

      我认为最好有一个单独的类/文件来表示使用哈希图的问卷。然后其他类可以使用它。我真的不认为有必要将问题存储在数据库中,因为它们仍会被加载到哈希图中。

      【讨论】:

        【解决方案4】:

        我的回答有点晚了,但也许有人会发现这些信息很有用。

        我完全同意 JonH 的观点。我将仅举例说明我如何实现它以使通用解决方案更加清晰。

        最常见的表格是:

        1. 问题:Id (PK)、问题、描述、OrderNumber、SectionId(FK 到 QuestionsSections.Id)、AnswerTypeId(FK 到 AnswerType.Id)
        2. 答案:Id (PK)、Answer、SubmitDate、UserId(FK 到 Users.Id)、QuestionId(FK 到 Questions.Id)
        3. 问卷:ID (PK)、名称、描述
        4. QuestionnaireQuestions:QuestionnaireId(PK、FK 到 Questionnaire.Id)、QuestionId(PK、FK 到 Questions.Id)
        5. QuestionsSections:ID (PK)、名称、描述、订单号
        6. AnswerType:ID (PK)、类型、描述

        此外,您还可以根据应用程序的需要,为可选答案(例如收音机、复选框等)或活动跟踪表创建特殊表格。


        以下是可能有用的链接(建议从上到下的阅读顺序):

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2010-09-24
          • 1970-01-01
          • 1970-01-01
          • 2017-11-07
          • 1970-01-01
          • 2013-03-03
          • 1970-01-01
          • 2016-09-02
          相关资源
          最近更新 更多