2011-01-07 47 views
3

由於問卷總是可以改變,而問題本身可能會很長,所以使用問題作爲列名似乎很愚蠢。 在數據庫中存儲調查問卷是否有任何慣例或經過驗證的方法?在數據庫中存儲調查問卷的有效方法是什麼?

我正在考慮有一個表(問題ID,問題),然後第二個表的問題ID和答案。但是這個解決方案可能太慢,因此需要第三次加入才能將問題與特定用戶聯繫起來。

回答

2

連接有什麼問題?這就是關係數據庫的一個關鍵點。

將問題存儲在一張表中。

將問題答案存儲在另一個表中。

如果答案是預定義的,並且在多個問題中是常見的,那麼將常見答案存儲在其自己的表中,並創建另一個具有AnswerID的QuestionID表。

不要害怕連接,它們是關係數據庫的一部分。沒有連接,你只需要處理平面文件。

+0

的確如此。但爲什麼現在每個人都在尖叫連接? – TheOne 2011-01-07 14:45:34

0

我認爲最好的答案是模擬問卷所涉及的信息。不要嘗試對問卷本身進行建模 - 問卷只是用於收集數據庫內容的手段。

0

我認爲最好有一個單獨的類/文件代表使用散列表的問卷。然後其他類可以利用它。我真的不需要將問題存儲在db中,因爲他們仍然會加載到散列映射中。

0

我已經晚了一點與我的答案,但也許有人會發現這個信息有用。

我完全同意JonH。我將舉一個例子說明我如何實現它,以便更清楚地制定通用解決方案。

最常見的表是:

  1. 問題:ID(PK),問題,描述,訂單編號,SectionId(FK到QuestionsSections.Id),AnswerTypeId(FK到AnswerType.Id)
  2. 解答:ID(PK),應答SubmitDate,用戶ID(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),類型,說明

此外,您可以希望創建特殊的表選配答案(例如收音機,複選框等)或活動跟蹤表,具體取決於您的應用需求。


下面是它可以是有益的(建議從閱讀從上到下順序)鏈接:

相關問題