为了报告而对实时数据进行反规范化 - 好还是坏?

时间:2009-11-20 18:34:18

标签: report normalization relational-database

对企业应用程序数据库进行反规范化的优缺点是什么,因为它会使编写报告更容易?

Pro - 在SSRS中设计报告可能会“更容易”,因为不需要加入。

由于重复数据和同步,开发/维护应用程序以处理非标准化数据将变得更加困难。

其他?

6 个答案:

答案 0 :(得分:19)

为报告而进行的非规范化很糟糕,m'kay。

创建视图或非规范化数据仓库是好的。

观看已解决了我的大多数报告相关需求。当用户几乎不断地生成报告或者您的视图开始变慢时,数据仓库非常棒。

这就是您想要规范化数据库的原因

  
      
  1. 从不受欢迎的插入,更新和删除依赖项中释放关系集合;
  2.   
  3. 随着新型数据的引入,减少重建关系集合的需要,从而延长应用程序的使用寿命;
  4.   
  5. 使关系模型对用户更具信息性;
  6.   
  7. 使查询统计信息的关系集合中立,这些统计信息随着时间的推移可能会发生变化。
  8.         

    -E.F。 Codd,“通过wikipedia

    进一步规范化数据库关系模型”

答案 1 :(得分:6)

您应该考虑去正规化的唯一时间是报告生成所需的时间是不可接受的。反规范化将导致有时无法确定的一致性问题,尤其是在大型数据集中

答案 2 :(得分:4)

为了摆脱报告的复杂性,不要非规范化,它可能会在应用程序的其余部分引起巨大的问题。要么您没有强制执行导致错误数据的规则,要么您执行插入,删除和更新对于每个人而言都会严重减慢,而不仅仅是运行报告的两个或三个人。

如果报告确实无法正常运行,则创建一个非规范化的数据仓库,并在每晚或每周的Feed中填充它。通常需要这种情况的报告通常不关心数据是否是最新的,因为它们通常是月度,季度或年度报告,这些报告在事后处理(尤其是聚合)大量数据。 p>

答案 3 :(得分:2)

你可以做两个......让应用程序的规范化数据库。 然后为报表创建一个非规范化数据库,并创建一个定期将数据从一个数据库复制到另一个数据库的应用程序。

毕竟,报告并不总是需要拥有最新的更新数据,大多数情况下,您可以在报告数据库上每隔1小时轻松启动一次更新,而且每天只能执行一次。

答案 4 :(得分:1)

除了数据仓库和视图解决方案提供的其他答案,这在某些方面是好的,如果你愿意牺牲一些性能来获得最后的第二个数据,但仍然想要一个规范化的数据库,你可以使用在Oracle物化视图上提交时快速刷新,或者在Sql Server中,您可以使用聚簇索引进行视图。

答案 5 :(得分:0)

另一个Con是数据可能不是实时的,因为有一些时间在数据周围移动从标准化形式转变为非标准化形式。如果有人希望报告达到要求的最后一秒,那么在这种情况下这很难做到。

如果这是原始帖子中的同步重复,抱歉我没有那么看。