2014-09-01 95 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

相关问题