2009-08-16 84 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

相關問題