用于在SQL Server中组合多个异构数据表的数据库模型重构?

时间:2011-11-07 15:57:51

标签: sql sql-server sql-server-2008

我接手了重新开发一个由Web界面使用的科学数据数据库的任务,原作者采用了“每个数据集表”的方法,该方法不能很好地扩展,现在已经公平难以管理已创建的200多个表。我花了很多时间试图找出如何纠结这个问题,但是数据集包含异构值,因此将它们组合到一个表中以及用于列定义的集合模式是不合理的。

我已经探索了EAV,XML列的可能性,并且最终尝试使用包含许多稀疏列的表,因为数据库在SQL Server 2008上运行。数据库在我最近创建的稀疏列中遇到了一些问题对他们的备份脚本造成了一些破坏,所以如果没有更好的方法,我会再次疑惑。我知道EAV不会带来不错的性能,而且我对XML数据类型的实验也证明了性能不佳,这可能要归功于某些表中的大量记录。

以下是摘要:

  • 大约200个表,其中大多数都有一些包含浮点数和小字符串的列
  • 有些表格有多达15,000条记录
  • 表格式不一致,因为列取决于原始实验数据中的样本数量。
  • SQL Server 2008

我将把这些数据中的大部分视为我正在开发的新版本中的遗留物,但我仍然需要能够显示它并查询它 - 我宁愿不必通过动态指定我的存储过程中的表名与当前的多表方法一样。有什么建议吗?

1 个答案:

答案 0 :(得分:0)

我建议第一步是通过视图合理化数据;尝试通过视图将类似的数据集合并到逻辑池中。

然后,您可以查看重构代码以查看视图,并查看Web平台是否有效运行。从那里你可以决定视图结构是否有益,如果是,那么看看将数据物理合理化为新表。

以这种方式使用视图的好处是你应该能够从视图上的索引中发出一点性能,并且它还应该让你更好地处理数据(也就是说,因为你是dev'ing新版本,它会建议你完全有能力理解问题领域)。

有200个表作为简单的原始数据集,并且考虑到你相信你的版本将会接管,我可能会通过原型练习看看你是否不能将视图写成同名的你的最终表名称将在V2中,这样,如果您的新数据库结构实际上正在运行,您也可以进行回溯测试。

最后,当有人以您描述的方式构建数据库而不查看数据,并且真正了解问题集时,明智之言;他们这样做是有原因的。无论是糟糕的设计,还是现在表面上出现的设计都不好的原因;你提出一致性作为一个问题 - 看看包装数据,看看你可以做到一致。

祝你好运!