2013-02-05 31 views
0

我設計了一個民意調查應用程序,其中用戶創建一個或幾個民意調查問題和每個問題的預定義答案,迄今沒有問題,即時考慮最簡單的方法來做到這一點是3表:數據庫結構化建議爲民意調查web​​應用程序

民意調查表:

id title description 

問題表:

id poll_id question 

答案表:

ID question_id回答

的問題是,用戶可以選擇在投票的訊問流程的不同的行爲,例如,正常輪詢會從提問1〜提問N(爲N的最後一個問題),但在我的情況下,如果用戶選擇問題4的答案2跳到問題7並忽略它們之間的休息,用戶可能會想要。

我有點困惑如何在數據庫中存儲這種行爲,有什麼建議嗎?

+0

我可以建議你先從商業課程開始,然後回溯到持久層。換個方式可能會把你鎖在一件直筒夾克上。 –

回答

0
Answer > NextQuestion table  

AnswerID NextQuestionID 

根據您的答案,接下來的問題就是在這裏被定義

1

看起來你需要一些與此類似:

enter image description here

看鑰匙的建設在這裏:

  • 問題是在identifying與POLL和生成的自然鍵不僅提供唯一性,還提供排序:QUESTION_NO可以單調增加,同時保持相同的POLL_ID。
  • 等效的效果由POSSIBLE_ANSWER中的ANSWER_NO完成。
  • 用戶可以爲任何給定問題選擇至多一個答案。這就是爲什麼ANSWER_NO是以外的ACTUAL_ANSWER主鍵
  • 另一方面,USER_ID保存在ACTUAL_ANSWER PK中,以允許多個用戶選擇相同的答案。
  • 從理論上講,在{POLL_ID,QUESTION_TEXT}上QUESTION_TABLE應該有一個關鍵字,以防止在同一輪詢中具有相同文本的兩個不同問題。然而,QUESTION_TEXT可能很長,並且可能被實現爲BLOB,大多數DBMS不能通過密鑰進行索引或約束。 POSSIBLE_ANSWER.ANSWER_TEXT存在類似的困境。

如果用戶跳過一個問題,只需省略相應的ACTUAL_ANSWER即可。

+0

謝謝,太棒了 – Wuaner