2013-01-31 44 views
1

嘿,我一直在糾纏着我的頭,因爲這個問題已經困擾了我很長一段時間了。設計一個長調查問卷的數據庫

基本上我有一個很長的在線調查問卷,我不太確定我應該如何設計mySQL數據庫來存儲答案。

因此,這裏是我的問題:

  1. 我應該創建每人(接受調查的人)1行?
  2. 有很多家長/孩子的問題(例如,如果回答是,那麼 回答以下問題,否則忽略)。如何處理他們?
  3. 對於一個問題,該人可以回答超過1個答案。如何 處理它們?

我想到的是創建1個表,每列是問題。如果有一個不考慮調查對象的父母/孩子問題,它將只剩下blank。對於可以有多個答案的問題,我將創建n列(其中n表示可能的答案數)。

您認爲如何?這是合適的還是有更好的方法來設計數據庫。

感謝

+1

您需要查看關係數據庫設計和數據庫規範化。不要把所有東西都扔到一張桌子上,否則你的手上就會有惡夢。 – Jeff

+0

這是nosql dbs,mapreduce和函數式編程的一個非常好的候選人;) – mpm

+0

對於RDBMS,你所做的被稱爲「One Big Spreadsheet」,被認爲是一種不好的方法。 http://www.youtube.com/watch?v=uFLRc6y_O3s – Musa

回答

2

每列作爲問題聽起來像一個壞主意給我,因爲這將是很難改變/添加問題。改變數據庫結構應該很少做。

表:回答

的答案,我會說一個表中包含所有的答案,這些列:

  • 本人身份證(誰回答了這個具體的問題)
  • 問題ID(在這一行回答了哪個問題)
  • 答案(答案本身,可以是字符串/數字)

如果這個人對同一個問題回答了多個答案,我會爲這2個答案放置2個單獨的行。正如你所看到的,每個答案都有一行(由一個人)。所以如果我們總共有10個問題並且每個問題有2個人回答一次,那麼我們在表中會有20行。

如果一個人沒有回答其中一個問題,那麼您根本就沒有針對這個問題+人的問題。

表:question_order

在我看來,你有另外一個要求,那就是控制的問題,流動 - 哪些問題來了之後。我們將需要持有另一個表這個流程,有以下欄目:

  • 問題ID(當前問題)
  • 解答條件(字符串\數字,這取決於你的問題)
  • 下一個問題ID

在這個表格中,您將掌握所有問題之間的聯繫。如果問題1總是導致問題2,則放入[1, NULL, 2] - 在這種情況下,NULL表示所有可能的答案。如果問題2僅在回答「是」時纔會導致問題3,請將[2, "yes", 3]。如果問題2僅在回答「否」時纔會導致問題4,請將[2, "no", 4]等等。

表:問題

另一個潛在的表你會發現有用的是問題,這給了什麼問題可以接受更多的信息表。例如,如果你想知道哪些問題支持一個以上的答案,可以使用這些列:

  • 問題編號
  • 支持多種答案(我們正在談論的問題)(布爾)

在這個表格中,您通常每個問題都有一行。