每列作爲問題聽起來像一個壞主意給我,因爲這將是很難改變/添加問題。改變數據庫結構應該很少做。
表:回答
的答案,我會說一個表中包含所有的答案,這些列:
- 本人身份證(誰回答了這個具體的問題)
- 問題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]
等等。
表:問題
另一個潛在的表你會發現有用的是問題,這給了什麼問題可以接受更多的信息表。例如,如果你想知道哪些問題支持一個以上的答案,可以使用這些列:
- 問題編號
- 支持多種答案(我們正在談論的問題)(布爾)
在這個表格中,您通常每個問題都有一行。
您需要查看關係數據庫設計和數據庫規範化。不要把所有東西都扔到一張桌子上,否則你的手上就會有惡夢。 – Jeff
這是nosql dbs,mapreduce和函數式編程的一個非常好的候選人;) – mpm
對於RDBMS,你所做的被稱爲「One Big Spreadsheet」,被認爲是一種不好的方法。 http://www.youtube.com/watch?v=uFLRc6y_O3s – Musa