Sql server 存储动态问卷的有效方法?

Sql server 存储动态问卷的有效方法?,sql-server,database-design,.net-4.0,dynamic-data,Sql Server,Database Design,.net 4.0,Dynamic Data,关于问题,我面临着几乎相同的情况,除了在我的情况下,问题可能是静态的(它可能会不时发生变化,我仍然认为为每个问题添加列不是一个好主意,但即使我决定添加,如何指定/检索答案),但是答案有不同的类型,例如答案可以是是/否、列表项、自由文本、列表项或自由文本(其他,请指定)、多个可选列表项等 实现这一点的有效方法是什么?希米,我已经写了一篇四部分的文章来解决这个问题-请参阅。本文介绍了如何让用户定义要存储的客户机数据,因此这不是对您的问题的精确检查,但非常接近。也就是说,我的文章展示了如何让最终用户定

关于问题,我面临着几乎相同的情况,除了在我的情况下,问题可能是静态的(它可能会不时发生变化,我仍然认为为每个问题添加列不是一个好主意,但即使我决定添加,如何指定/检索答案),但是答案有不同的类型,例如答案可以是是/否、列表项、自由文本、列表项或自由文本(其他,请指定)、多个可选列表项等


实现这一点的有效方法是什么?

希米,我已经写了一篇四部分的文章来解决这个问题-请参阅。本文介绍了如何让用户定义要存储的客户机数据,因此这不是对您的问题的精确检查,但非常接近。也就是说,我的文章展示了如何让最终用户定义要存储的数据类型,这符合您的需求

以下ER图给出了数据模型的要点:

在这里,
DynamicAttributesForClients
是一个表,用于指示用户希望为其客户端跟踪的用户创建的属性。简而言之,每个属性都有一个
DataTypeId
值,该值指示它是布尔属性、文本属性还是数字属性,等等。在您的情况下,此表将存储调查的问题

DynamicValuesForClients
表保存为特定客户机存储的特定属性的值。在您的情况下,此表将存储调查问题的答案。实际值存储在
DynamicValue
列中,该列的类型为
sql\u variant
,允许存储任何类型的数据-数字、位、字符串等

我的文章没有讨论如何处理多项选择题,用户可以从预设的选项列表中选择一个选项,但是增强数据模型以允许这一点非常简单。您将创建一个名为
DynamicListOptions
的新表,其中包含以下列:

  • DynamicListOptionId
    -主键
  • DynamicAttributeId
    -指定这些问题与哪些属性关联
  • OptionText
    -选项文本
因此,如果您有一个属性是一个多选选项,您应该使用查询返回的选项填充用户界面中的下拉列表:

SELECT OptionText
FROM DynamicListOptions
WHERE DynamicAttributeId = ...
最后,您可以将所选的
DynamicListOptionId
值存储在
DynamicValuesForClients.DynamicValue
列中,以记录他们选择的列表选项(如果他们没有选择项目,则使用
NULL

把这篇文章通读一遍。您可以下载一个完整的工作演示,其中包括完整的数据库及其模型。此外,组成本系列的四篇文章深入探讨了数据模型,并展示了如何构建基于web(ASP.NET)的用户界面,以允许用户定义动态属性,以及如何为数据输入显示这些属性,等等

快乐编程

这可能并不完全适合你,但这是我在兼职工作中得到的

我有一个问题表、一个答案表和一个调查表。对于每个新的调查,我都会创建一个调查构建(因为每个调查都是独一无二的,但问题和答案会重复很多次)。然后,我有一个受访者表,其中包含一些关于受访者的信息(它还链接回调查表,在图表中忘记了这一点)。我还有一个回复表,将受访者和调查结果联系起来。这可能不是最好的方法,但对我来说,这是一种有效的方法,而且运行速度非常快(我们在响应表中的值大约为1mill+,处理起来就像做梦一样)


通过这个模型,我可以得到可重复使用的问题、可重复使用的答案(我们的许多问题都使用“是”和“否”)以及一个相当小的回答表。

我会包括列表项吗(即,它的答案必须来自预设列表的属性+“其他”-请阅读我的问题)@希米:我更新了我的答案,加入了关于多项选择题的讨论。谢谢,谢谢。你的回答帮助我开始设计类似的东西。干杯