2012-06-28 20 views
1

我正在爲如何爲有人(非匿名)填寫調查問卷的情況建立數據庫而苦苦掙扎。人與問卷之間的關係是多對多的 - 一個人完成多個問卷,一個問卷由多個人完成。所以,我有一個PERSON表,一個QUESTIONNAIRE表和一個連接表(PERSON-QUESTIONNAIRE)。細節有兩個主人嗎?

但是我在哪裏把問題本身出現的信息?問卷項目有兩個部分(兩個領域),其中一個帶有人們會回答的問題或陳述(ITEM),另一個帶有空間作答(RESPONSE)。假設所有這些都放在一個單獨的表中,那麼這張表與什麼連接? (QUESTIONNAIRE表...一個QUESTIONNAIRE可以有多個QUESTIONNAIRE-ITEMS?)

而且,如果我對最後一點是正確的,我不能爲我的生活弄清楚如何設置數據庫網格(德爾福),將顯示選定問卷和選定人員的ITEM和RESPONSE字段。 (我知道如何使用db-aware組件編碼主/從關係,但這就像是一個有兩位主人的細節。)

回答

7

您將有一張表QUESTIONNAIRE-ITEMS(問題)和一張單獨的表格QUESTIONNAIRE-RESPONSES (答案),因爲對於單個問題會有多個答案,來自多個人的答案。前者獲得QUESTIONNAIRE的外鍵,而後者獲得QUESTIONNAIRE-ITEMS和PERSON的外鍵。

事實上,PERSON-QUESTIONNAIRE表可以省略,因爲可以從其他表中查詢該信息。因此,對於設計,我建議:

  • 調查:ID(PK),描述等...
  • 用戶:ID(PK),名稱,等...
  • 問題:ID(PK ),SurveyID(FK),問題等...
  • 解答:ID(PK),QuestionID(FK),用戶名(FK),應答等...

爲DBGrid的視圖將基於如下查詢:

SELECT 
    Question, 
    Answer, 
    ... 
FROM 
    Questions INNER JOIN Answers ON Questions.ID = Answers.QuestionID 
WHERE 
    Questions.SurveyID = :SurveyID AND Answers.UserID = :UserID 

在您的另一部分GUI中,您選擇參數SurveyIDUserID

作爲獎勵:獲得調查和用戶查詢,以替代您單獨的連接表,看起來像:

SELECT 
    Surveys.ID, 
    Users.ID 
FROM 
    Users INNER JOIN (
    Answers INNER JOIN (
     Questions INNER JOIN (
     Surveys 
    ) ON Questions.SurveyID = Surveys.ID 
    ) ON Answers.QuestionID = Questions.ID 
) ON Users.ID = Answers.UserID 
GROUP BY 
    Surveys.ID, 
    Users.ID 
+0

QUESTIONNAIRE-RESPONSES是否與PERSON或PERSON-QUESTIONNAIRE(如Alanyst建議的)相關聯? –

+0

就像我說的:RESPONSES將被鏈接到ITEMS和PERSON。 (答案鏈接到問題和用戶,對於重命名抱歉)。 – NGLN

+1

請注意,只要用戶只回復一次相同的調查問卷,此設計即可運行。如果他們需要重新參加問卷調查,那麼將需要PERSON-QUESTIONNAIRE表,而答覆(答案)則需要直接引用該表,而不是PERSON。 – Alanyst

3

項目和響應應該是不同的表;它們之間有一對多的關係。 (一個項目屬於一個問卷調查,但很多人可以提供該項目的反應,所以每個項目都會有很多的反應。)

我建議這樣的設置:

PERSON <---- PERSON_QUESTIONNAIRE ----> QUESTIONNAIRE 
         ^     ^
         |      | 
         |      | 
        RESPONSE  ----->  ITEM 

我沒有關於如何建立數據庫網格(而不是德爾福的專家)的任何建議,但有時讓設計扭結出來,將有助於技術解決方案變得更加清晰。

+0

很好地概述,但這種設置並不真正讓你知道哪個人做出了哪個迴應。 –

+0

它的確如此:'RESPONSE - > PERSON_QUESTIONNAIRE - > PERSON' – Alanyst

+1

你是對的,確實如此,我可能正在考慮其他事情。但是還有一件事我不確定是否被關注(至少你不清楚它是否是這樣)。這是一個迴應可能參考一個項目和一個人/問卷對,它們並沒有真正參考同一份問卷(也就是說,沒有提到可以確保兩件事情與同一份問卷相關的約束)。 –