2009-08-16 70 views
4

我有一个披露表格,要求用户输入一系列约30个问题的“是/否”答案。有没有更好的方法来构建处理用户问卷的SQL表?

有没有更好的方法来创建表格,而不是有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 
) 

回答

1

好,有2个更好的想法我能想到的:

  1. 店的载体(即包含所有结果的字符串/字节数组变量),并处理程序与数据相关的一切(通过这种方式,您对SQL查询的限制更多)

  2. 存储由调查ID键入的键/值对,例如

    1134年龄68

    1134喜欢巧克力

    1134宽度6"

    1135年龄31

    1135喜欢香草

    1135宽度3.2"

这取决于你想要对结果做什么。 但是这是更“正确”比你提出什么,因为我的最后一个选项,你就不太可能遇到麻烦

+0

减少SQL使用的好处是什么?你已经说过它是给定的。 – 2009-08-16 00:28:20

+0

谢谢。我曾考虑将JSON/XML存储在一个字段中,但对这些数据的报告对我来说将会非常棘手。所有问题都提到了是/否的答案,所有的答案都是“不”。也许最好的办法是只存储“显着”的答案,即用户在问题中选择“是”的地方。那么ID,UserID,QuestionID就足够了? – Joshua 2009-08-16 00:28:43

+0

这个答案帮助我得出结论,我可以通过一个问题表(QuestionID int,Question varchar(max))和响应表(ResponseID int,QuestionID int,UserID int,响应位)很好地得到结论。 – Joshua 2009-08-16 00:37:25

4

要完全恢复正常,你可能要考虑这样的结构:

Table Questionaire(
    QuestionaireID... 
    QuestionaireName... 

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

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

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

这提供了更高的保真度,你可以捕捉更多维度的数据 - 在响应级别,个别答案水平,以及面向未来的系统更改。

+1

如果响应表不链接到QuestionID而不是QuestionaireID? 如果Answers链接到QuestionID,QuestionaireID真的有必要吗? ResponseID是答案中的主键,还是指向Response表的链接? – Joshua 2009-08-16 00:22:47

+0

@Joshua谢谢,答案不应该指向问卷。 – 2009-08-16 00:27:12

1
  1. 你想重新使用的问题在不同的问卷调查?
  2. 你想让用户能够接受多个问卷吗?
  3. 你有没有想过它是什么,但是是/否的答案,如多项选择?

如果对于所有3,我会做这样的:

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

表问题(QuestionID,名称)

表QuestionResponses (QuestionResponseID,QuestionID,ResponseText)

表QuestionaireQuestions(QuestionaireID,QuestionID)

表UserQuestionaire(UserQuestionaireID,QuestionaireID,用户名)

表UserResponses(UserQuestionaireID,QuestionResponseID)

现在,您可以定义一个问题清单,将它们添加到一对多的问卷调查,他们可以有任意数量的反应,用户可以登录问卷和他们选择的任何答案。

+0

在SQL中,规范化与实用性之间总是存在折衷。你的回答是高度规范化的,并且符合你列出的三个要求,但在我的情况下有点矫枉过正。我的用法是申请服务的用户。他们必须向“你是否是吸烟者”等问题披露“是/否”。这是严格的应用和答案集之间的1-1关系,每个问题都必须有答案,所以我最初认为要捆绑30个额外应用程序表中的列。在考虑了Berry Tsakala的回答后,我得出了评论中提到的结论。 – Joshua 2009-08-16 13:39:23

相关问题