SQL表结构

时间:2011-08-18 22:36:43

标签: tsql data-structures database-design

我正在开始一个处理调查和评论的新项目。在这一点上,我试图弄清楚什么是最好的sql表结构来存储和处理这些信息。

基本上,调查将包含评级,文本评论和可供客户分享的其他可选信息。现在我想要将每个信息存储在一个单独的列中,或者可能合并所有这些数据并将其作为XML存储在一列中。

我不确定什么是更好的解决方案,但我脑子里有以下问题: - 在单个XML列的情况下,收集的信息可能会增加 - 从xml列提取和处理信息时,单个XML列是否会对性能产生严重影响

4 个答案:

答案 0 :(得分:3)

如果您有理由查询单条信息或单独更新信息,则不要将该数据存储在XML中,而是存储为单独的列。

IMO很少会在数据库中存储XML(或任何其他复合类型的数据)。虽然总有例外。

答案 1 :(得分:2)

嗯,为了保持这个简单,你有两个选择:动态或静态调查。

动态调查看起来像这样: dynamic

报告不仅更复杂,而且UI也是如此。问题的数量是未知的,您最终需要逻辑来处理订单,分组和数据类型。

静态调查看起来更像是这样的: static

虽然您肯定放弃了一些灵活性,但解决方案(包括报告)却相当简单。您无需处理订单,分组或数据类型(至少动态)。

我喜欢在几乎所有事情中都认为“简约是最好的设计”。

由于我无法详细了解您的要求,我无法假设哪个更合适。但我可以告诉你,动态通常是在静态足够的时候构建的。

祝你好运!

答案 2 :(得分:1)

如果您不想与需要关系数据的关系数据库进行斗争,那么您可能需要合理规范化的数据。在您的情况下,我没有看到XML会给您带来什么好处。如果您在调查中输入了多个值,则可能需要另一个用于调查的表,其中包含调查的外键。

如果这是一个相对广泛的应用程序,您可能会想到一个调查定义表,一个调查问题表,一个调查响应表和一个调查问题响应表。如果调查数据可以是多种类型,您可能需要一个表格来查询可能会被问到的每种问题,不过在某些情况下,列可能会这样做。

编辑 - 我认为你至少每个问题答案都有一行。如果答案很复杂(不仅仅对应于简单数据类型的一个实例),它实际上可能是多行(尽管如果列数很小且固定,则非规范化为多列可能是O.K.)。如果一个问题的答案需要存储在多行中,您几乎肯定会得到一个代表答案的表,每个答案有一行,另外还有一个代表答案片段的表,并且每行有一行片。

如果您考虑使用XML的原因是答案的类型会有很大差异(例如,评论,评论,标题,标题,正文以及一个问题的评论部分;另一个问题的超链接列表等等)然后答案表可能实际上必须是几个表,以便您可以为每种类型的问题建模数据。那将是一个非常复杂的案例。

希望在单个表中每个响应一行就足够了。

答案 3 :(得分:0)

为了搭载Flimzy的答案,您只想将数据存储在数据库中而不是特定格式(即XML)。您可能目前需要XML,但明天它可能是CSV或固定宽度的DAT文件。此外,如果只存储数据,则可以使用数据库的“power”来搜索特定的信息列,然后根据需要将其作为XML返回。