我正在开始一个新的项目,将处理调查和审查。在这一点上,我正在尝试找出存储和处理此类信息的最佳sql表结构。
基本上,该调查将包含评分、文本评论和其他可供客户分享的可选信息。现在,我正在考虑或者将每个信息存储在单独的列中,或者合并所有这些数据并将其作为XML存储在一列中。
我不确定什么是更好的解决方案,但我有以下问题:-在单个XML列的情况下,收集的信息可能会增加吗?当从XML列提取和处理信息时,单个xml列是否会对性能产生严重影响
发布于 2011-08-19 08:00:25
为了简单起见,您有两个选择:动态调查或静态调查。
动态调查将如下所示:

不仅报告会更复杂,而且UI也会更复杂。问题的数量是未知的,您最终将需要逻辑来处理顺序、分组和数据类型。
静态调查看起来更像这样:

尽管您肯定放弃了一些灵活性,但解决方案(包括报表)要简单得多。您不需要处理顺序、分组或数据类型(至少动态地)。
我喜欢争论“简单性是最好的设计”在几乎所有的事情上。
因为我不能详细了解你的要求,所以我不能假设哪一个更合适。但我可以告诉你,动态通常是在静态足够的情况下构建的。
祝你好运!
发布于 2011-08-19 06:39:19
如果您有理由查询一条信息,或者单独更新它,那么不要将数据存储在XML中,而是作为单独的列存储。
在数据库中存储XML (或任何其他复合类型的数据)是一个好主意,这是很少见的。尽管总会有例外。
发布于 2011-08-19 06:51:21
如果您不想与需要关系数据的关系数据库打架,那么您可能需要合理规范化的数据。在您的情况下,我看不出XML会给您带来什么优势。如果在调查中输入了多个值,则可能需要另一个带有调查外键的调查条目表。
如果这将是一个相对广泛的应用程序,您可能会考虑一个用于调查定义的表、一个用于调查问题的表、一个用于调查回答的表和一个用于调查问题回答的表。如果调查数据可以是多种类型,您可能需要为可能提出的每种问题创建一个表,尽管在某些情况下可能需要一个列。
编辑-我认为每个问题的答案至少有一行。如果答案很复杂(不只对应于简单数据类型的一个实例),那么实际上可能是多行(不过,如果列的数量很少且固定,则反规范化为多列可能是可以的)。如果一个问题的答案需要存储在多行中,您几乎肯定会得到一个表示答案的表,每个答案有一行,加上另一个表示答案片段的表,每个答案有一行。
如果考虑使用XML的原因是答案的类型非常不同(例如,一个问题的评价、标题、标题、正文和评论部分;另一个问题的超链接列表,等等)。那么回答表实际上可能必须是几个表,这样您就可以为每种类型的问题建模数据。不过,这将是一个相当复杂的情况。
希望在单个表中每个响应有一行就足够了。
https://stackoverflow.com/questions/7114979
复制相似问题