Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
存储调查和答案的SQL结构-基于用户数据构建表和查询?_Sql_Survey_Auto Generate - Fatal编程技术网

存储调查和答案的SQL结构-基于用户数据构建表和查询?

存储调查和答案的SQL结构-基于用户数据构建表和查询?,sql,survey,auto-generate,Sql,Survey,Auto Generate,说到SQL,我完全是个新手。我正在ASP.NET中创建一个网站,用于进行调查。拥有特权的管理员用户将能够构建调查。然后很多其他人会对调查做出回应 一旦我有了新调查的问题集,自动构造表和插入查询以存储回答的最佳方法是什么 更新 感谢您的快速回复!我仍然有点不清楚在这种情况下如何最好地存储调查结果。每个受访者会得到一排桌子吗?若然,该栏是否为“第1栏中的条目确定的调查问题k的答案” 您可能不希望以编程方式生成模式 相反,要为调查、问题(属于调查)、响应集(每个用户一个)和问题响应(属于响应集)创建一

说到SQL,我完全是个新手。我正在ASP.NET中创建一个网站,用于进行调查。拥有特权的管理员用户将能够构建调查。然后很多其他人会对调查做出回应

一旦我有了新调查的问题集,自动构造表和插入查询以存储回答的最佳方法是什么

更新


感谢您的快速回复!我仍然有点不清楚在这种情况下如何最好地存储调查结果。每个受访者会得到一排桌子吗?若然,该栏是否为“第1栏中的条目确定的调查问题k的答案”

您可能不希望以编程方式生成模式


相反,要为调查、问题(属于调查)、响应集(每个用户一个)和问题响应(属于响应集)创建一个表格。

您不想为每个调查创建新表格

创建调查表(SurveyID、UserID、Name等)

创建问题表(问题ID、调查ID、问题文本、排序器等)

(可选)创建选项表,假设您有多项选择类型的问题(OptionID、QuestionID、OptionText等)

然后,当有人创建调查时,您将其插入调查表,引用该人的用户ID作为外键,然后获取新插入的SurveyID

然后,对于他们添加的每个问题,将其插入问题表,使用上述SurveyID作为外键。。等等

编辑以回答您的编辑:

很抱歉,我本应该继续讨论存储答案

您需要另一个名为SurveyResponses的表(ResponseID、Name等)
还有另一个表,我将调用ResponseAnswers(ResponseAnswerID、SurveyID、ResponseID、QuestionID、AnswerText/AnswerID),其中SurveyID和ResponseID是各自表的外键,根据用户是否有多项选择,或者输入答案,您可以将其答案存储为文本(varchar)或者作为选项表的另一个外键。

您不会自动构造该表。表格将被预定义,答案将被添加到表格中。我认为现在开始使用ASP.NET的最好方法是深入研究MVC和Linq)

我会想到几个选择:

  • 创建一个一对多
    调查
    表和
    问题
    表,其中每个
    问题
    都有一个列
    数据类型
    ,该列包含我们期望的响应数据类型的代码,还可以选择一些其他列/可用选项的相关表,该列指定此问题是否为多选/单选,强制性/可选问题等。
    答案
    表格的答案根据问题数据类型进行序列化/取消序列化/索引/格式化等
  • 考虑使用NoSql数据库以类似的方式存储调查数据

Neil发布的内容也正是我们过去的做法。此外,无论您是否预期编辑您的调查或其他类似内容,您都应该提前确定回复持续时间。有一个与此概念类似的遗留系统,允许编辑调查。编辑问题时,该问题的所有现有回答都将被打断。一旦回答了问题,除拼写错误外,不应更改该问题。如果你想“改变”它,你可以设置一个标志使该问题处于非活动状态,然后用一个新的问题替换它。但在大多数情况下,你真的只想开始一项新的调查,并反对旧的调查。