2012-10-23 96 views
0

我正在尝试找到创建调查应用程序的最佳解决方案,该调查应用程序允许用户在管理员部分中选择他们的问题。.NET调查应用程序中的自定义问题

如果我有一个询问问题的前端网页,当他们回答时,我将答案保存在数据库中。现在,如果我的“FinishedSurvey”表中的列与问题匹配,这非常棒。然而,我想要的是能够让用户选择他们的问题,以便他们在登录时看到他们的问题,并在提交时将这些答案与这些问题一起保存以供将来检索。

此问题转移到任何应用程序,您需要允许人们在您不知道的情况下更改数据库中的存储。

我已经在过去做过这样的事情,我有20个int列和20个varchar列,其中有配置文件映射到特定客户配置的通用名称。说varCharColumn1被映射到“你叫什么名字?”。然而,这是混乱的,不是真正可扩展的,而是浪费存储空间。

此应用程序将有成千上万的用户,所有用户使用不同的输入方法和不同的答案格式提出不同的问题。有些可能需要下拉式设置答案,日历,10个字符的自由文本,1000个字符的自由文本和数字。

有可能是一个简单的答案或方法,或者甚至一个技术,我不亲近做这个,但我真的不能想到一个简单的方法。

这个特殊的应用程序是一个MsSQL数据库的ASP.NET 4.0网站。

回答

3

列符合问题[...] 20 int列和20 varchar列[...]然而,这是混乱的,不是真正可扩展的,并且是浪费存储。

你说得对。拿起一本关于数据库规范化的书。如果有人想要一个有100个问题的调查呢?你会说“我们不能”,或者你会推出一个创建百列的更新吗?

我想我会做这样的:假设你有一个问卷调查表,在顶层:

ID | Description 
------------------------- 
1 | 'Test questionnaire' 

创建一个由问题的表格,例如:

ID | QuestionnaireID | Question  | (Other options like 'IsMandatory') 
---------------------------------------------------------------------------- 
1 |    1 | 'Test question' | 

然后创建一个答案表:

ID | QuestionID | Answer   | IsUserSpecified 
--------------------------------------------------- 
1 |   1 | 'Test answer 1' |    0 
2 |   1 | 'Test answer 2' |    0 
3 |   1 | 'Other...'  |    1 

然后创建一个包含回答问题的响应表:

ID | UserID | AnswerID | AnswerValue 
---------------------------------------------------------------------------- 
1 |  1 |  1 | 
1 |  2 |  3 | 'I was entered by the user' 

你完成了。你让用户输入一个AnswerValue,就像他们可以输入自己的值时一样,如“其他...”答案。

不幸的是,这并不涉及给定答案的类型。我认为,但我没有时间思考和/或测试,可以在答案和答复表中添加输入列(如VarCharValue,DateTimeValue,IntValue ...)。然后,您需要在答案表中注册可输入答案的类型值并填写/阅读相应的列。虽然这个设计仍然有味道。

+0

我认为如果你有一个响应行,你知道哪个答案是和每个答案属于一个问题,用户响应表应该包含QuestionId也 –

+0

@Murali。 – CodeCaster

+0

谢谢!我同意!!。是否有可能更新您的答案,以支持多个问题类型如文本框/下拉/等?我很困惑在哪个表中,我应该继续根据问题类型来呈现控件。 –

相关问题