2014-09-01 118 views
1

我嘗試使用基於ms sql server的asp.net(c#)創建調查應用程序。用戶可以看到多選,單選和文本框答案選項來輸入。我能夠在我的數據庫中存儲文本框和單選答案,但我堅持存儲多個答案。在數據庫中存儲調查的多項選擇答案

我的設計如下:

員工:(ID,用戶名)

survey_title:(ID,標題,描述,creation_data)

survey_answer_type:(ID ,type_name)

survey_question:(ID,問題,survey_id,survey_answer_type_id)

survey_answer:(ID,question_id,答案) - 所有答案選擇(答案爲空,如果答案類型是文本框) -

survey_eanswer :(ID,EMPLOYEE_ID,answer_id,str_answer)-answers員工(str_answer用於存儲文本框答案) -

我無法找到一個方法來存儲多個答案在我的survey_eanswer表,我知道逗號單獨的投入不是一個好的設計策略。

謝謝。

+1

如果你把它周圍的你可能會發現一些優勢,並想想你想要什麼樣的形式可以獲取數據* out *例如,如果您需要查詢「問題4的答案爲'c'的人」,您可能會發現'survey_eanswer'中有多行每個問題都是適當的。 – 2014-09-01 12:07:24

回答

1

一個好的設計將有一個表

survey_question_options:(ID,QUESTION_ID,OPTION)

| ID | question_id |選項|
| 1 | 1 | red |
| 2 | 1 | blue |
| 3 | 1 | white |
| 4 | 2 |小|
| 5 | 2 | medium |
| 6 | 2 |大|

然後只保存選擇的選項的ID。 將每個選擇的選項另存爲獨立的數據庫條目。
這使您可以使用標準的sql操作來加入/分組,並在最後評估您的調查。

例如,你想現在有多少用戶已經選擇介質:

SELECT Count(*) 
FROM survey_answers 
WHERE question_ID = 2 AND answer = 2 

,或者更復雜,但意思是一樣的:

SELECT Count(survey_answer.id) 
FROM survey_answers 
LEFT JOIN survey_question_options ON 
    survey_question_options.ID = survey_answers.Answer AND 
    survey_question_options.question_ID = survey_answers.question 
WHERE survey_answer.question_ID = 2 
    AND survey_question_options.option LIKE 'medium' 
+0

我的survey_answer表格完全一樣。但是,如果例如您爲問題2選擇了小型和中型,會發生什麼情況。2.如何以明智的方式將survey 4中的ID 4和5存儲在survey_eanswer中? – quents 2014-09-01 12:19:12

+0

啊,你有一個問題,允許多個答案...我明白了。在這種情況下,我會爲每個答案提供一個新條目。如果人選擇選項1,3 - 爲選項3添加一個數據庫條目的選項1和另一個。 – mcdikki 2014-09-01 12:25:51

+0

謝謝,我的想法很複雜,但解決方案很簡單:) – quents 2014-09-01 14:07:59

相關問題