有没有更好的方法来构建处理用户问卷的SQL表?

时间:2009-08-16 00:14:08

标签: sql

我有一份披露表格,要求用户输入一系列约30个问题的是/否答案。

是否有更好的方法来创建表格,而不是有30列对应问题?

下面是我的MS-SQL脚本,但问题与结构有关,而不是语法。

CREATE TABLE Questionaire(
    QuestionaireID int IDENTITY(1,1) NOT NULL,
    UserID int NOT NULL,
    Q1 bit NOT NULL,
    Q2 bit NOT NULL,
    Q3 bit NOT NULL,
    ... etc ...
    ... etc ...
    Q30 bit NOT NULL
)

-- and to store the questions relating to Q1, Q2, etc...
CREATE TABLE Questions(
    QuestionID int IDENTITY(1,1) NOT NULL,
    Question varchar(30) NOT NULL
)

3 个答案:

答案 0 :(得分:4)

要完全规范化,您可能需要考虑这样的结构:

Table Questionaire(
    QuestionaireID...
    QuestionaireName...

Table Questions(
    QuestionaireID...
    QuestionID...
    QuestionName...

Table Response(
    QuestionaireID...
    ResponseID...
    UserID...

Table Answers(
    AnswerID...
    ResponseID...
    QuestionID...
    Answer...

这提供了更高的信息保真度,因为您可以在更多维度捕获数据 - 在响应级别,单个答案级别,以及为系统更改而自行验证。

答案 1 :(得分:1)

好吧,我能想到两个更好的想法:

  1. 存储一个向量(即包含所有结果的字符串/字节数组变量),并处理与程序中的数据相关的所有内容(这样,您对SQL查询的限制更多)

  2. 存储键/值对,由survey-id键入,例如

    1134岁68岁

    1134更喜欢巧克力

    1134宽6“

    1135年龄31岁

    1135更喜欢香草

    1135宽3.2“

  3. 这取决于你想对结果做什么。 但这比你建议的更“正确”,因为我最后一个选择你不太可能遇到麻烦

答案 2 :(得分:1)

  1. 您想在不同的问卷中重复使用问题吗?
  2. 您是否希望用户能够承担多个问卷?
  3. 你有没有想要它,除了是/否答案,比如多项选择?
  4. 如果对所有3人都是,我会这样做:

    表问卷(QuestionaireID,名称,描述)

    表问题(QuestionID,名称)

    表QuestionResponses(QuestionResponseID,QuestionID,ResponseText)

    Table QuestionaireQuestions(QuestionaireID,QuestionID)

    表UserQuestionaire(UserQuestionaireID,QuestionaireID,UserID)

    表UserResponses(UserQuestionaireID,QuestionResponseID)

    现在,您可以定义问题列表,将其添加到一对多的问卷中,他们可以有任意数量的回复,用户可以记录问卷以及他们选择的任何回复。