【问题标题】:Database model refactoring for combining multiple tables of heterogeneous data in SQL Server?在 SQL Server 中组合多张异构数据表的数据库模型重构?
【发布时间】:2011-11-08 00:23:06
【问题描述】:

我接手了重新开发供 Web 界面使用的科学数据数据库的任务,其中原作者采用了“每个数据集一个表”的方法,这种方法不能很好地扩展,现在相当已创建的 200 多个表难以管理。我花了很多时间试图弄清楚如何解决这个问题,但是数据集包含异构值,因此不可能将它们组合到一个具有列定义模式的表中。

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

总结如下:

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

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

【问题讨论】:

  • 如果这主要是科学数据,大多数列是数字吗?另外,每个数据集的典型列数是多少,数据集中的最大列数是多少?
  • dba 遇到了什么问题?稀疏列不应该影响备份,除非它们正在执行表副本或其他操作。
  • 大部分列都是浮点数,但也有一些短字符串。每个表的列数从 1 到 23 不等。它们的备份失败是因为稀疏列上的索引不可压缩。他们认为他们已经解决了这个问题,但现在由于其他一些他们认为服务包可以修复的原因而失败,但它是用于其他事情的生产服务器,因此避免停机会很好。
  • 这似乎更像是您的 DBA 需要解决的问题。此外,浮点数非常难以预测...docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html

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


【解决方案1】:

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

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

以这种方式使用视图的好处是您应该能够从视图的索引中获得一点性能,并且它还应该让您更好地处理数据(也就是说,因为您正在开发新版本,这表明您完全有能力理解问题域)。

将 200 个表作为简单的原始数据集,并且考虑到您认为您的版本将接管,我可能会进行原型练习,看看您是否不能编写与最终表同名的视图名称将在 V2 中,这样您还可以回测您的新数据库结构是否确实有效。

最后,对聪明人说一句话,当有人按照您描述的方式构建数据库时,无需查看数据,并且真正了解问题集;他们这样做是有原因的。要么是糟糕的设计,要么现在表面上看起来是糟糕的设计是有原因的;您将一致性作为一个问题提出-查看包装数据并查看您可以使其保持多么一致。

祝你好运!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多