在数据库中存储调查的多项选择答案

时间:2014-09-01 12:01:58

标签: c# sql-server database database-design survey

我尝试使用基于ms sql server的asp.net(c#)创建一个调查应用程序。用户可以看到要输入的多项选择,单项选择和文本框答案选项。我可以在我的数据库中存储文本框和单选答案,但我仍然坚持存储多个答案。

我的设计如下:

员工 :( id,username)

survey_title :( id,title,description,creation_data)

survey_answer_type :( id,type_name)

survey_question :( id,question,survey_id,survey_answer_type_id)

survey_answer :( id,question_id,answer) - 所有答案选项(如果答案类型为文本框,答案为空) -

survey_eanswer :( id,employee_id,answer_id,str_answer) -answers of employees(str_answer用于存储文本框答案) -

我找不到在survey_eanswer表中存储多个答案的方法,而且我知道逗号分隔的输入不是一个好的设计策略。

感谢。

1 个答案:

答案 0 :(得分:1)

一个好的设计就是有一张桌子

survey_question_options :( ID,QUESTION_ID,OPTION)

| ID | question_id |选项|
| 1 | 1 |红色|
| 2 | 1 |蓝色|
| 3 | 1 |白色|
| 4 | 2 |小|
| 5 | 2 |介质|
| 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'