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

Report 为了报告而对实时数据进行非规范化-好还是坏?,report,normalization,relational-database,Report,Normalization,Relational Database,反规范化企业应用程序数据库的优点/缺点是什么,因为它将使编写报告更容易 在SSR中亲设计报告可能会“更容易”,因为不需要连接 Con-由于数据重复和同步,开发/维护应用程序以处理非规范化数据将变得更加困难 > P>你唯一应该考虑反常态化的时间是当报告生成时所花费的时间是不可接受的。去规范化会导致一致性问题,这些问题有时无法确定,尤其是在大型数据集中为了报告而去规范化是不好的,m'kay 创建视图或非规范化数据仓库是好的 视图解决了我大部分与报告相关的需求。当用户几乎不停地生成报告或视图开始变慢时

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

在SSR中亲设计报告可能会“更容易”,因为不需要连接

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


> P>你唯一应该考虑反常态化的时间是当报告生成时所花费的时间是不可接受的。去规范化会导致一致性问题,这些问题有时无法确定,尤其是在大型数据集中

为了报告而去规范化是不好的,m'kay

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

视图解决了我大部分与报告相关的需求。当用户几乎不停地生成报告或视图开始变慢时,数据仓库非常有用

这就是为什么要规范化数据库

  • 将关系集合从不需要的插入、更新和删除依赖项中解放出来
  • 随着新数据类型的引入,减少了重新构造关系集合的需要,从而延长了应用程序的生命周期
  • 使关系模型向用户提供更多信息
  • 使关系集合与查询统计信息保持中立,随着时间的推移,这些统计信息可能会发生变化 -E.F.Codd,“数据库关系模型的进一步规范化”,通过


    另一个缺点是,数据可能不是实时的,因为数据从规范化形式到非规范化形式需要一些时间。如果有人想让报告达到要求的那一秒,在这种情况下很难做到


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

    不要仅仅为了消除报告中的复杂性而去规范化,它可能会在应用程序的其余部分造成巨大的问题。要么你不强制执行规则,导致数据不好,要么如果你这样做,那么插入、删除和更新可能会对每个人造成严重影响,而不仅仅是两三个运行报告的人


    如果报告确实不能很好地运行,那么创建一个非规范化的数据仓库,并在每晚或每周的提要中填充它。通常需要这样做的报告通常不关心数据是否是最新的,因为它们通常是在事后处理(尤其是汇总)大量数据的月度、季度或年度报告。

    您可以同时做这两件事。。。让我们为应用程序创建规范化数据库。 然后为报表创建一个非规范化数据库,并创建一个应用程序,将数据从一个数据库定期复制到另一个数据库


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

    除了数据仓库之外,您还可以查看其他答案中提供的解决方案,这在某些方面很好,如果您愿意牺牲一些性能来获得最后一秒的数据,但仍然需要一个规范化的数据库,那么您可以在Oracle上使用提交时快速刷新的物化视图,或者在Sql Server中,您可以使用聚集索引来查看。

    视图并不总是解决方案,尽管有很多人建议使用它们。如果由于高度规范化的数据库设计而导致复杂的连接,则视图的运行时可能无法接受。我同意Irwin的观点,如果问题是性能,则视图将没有帮助—使用数据仓库。不管怎样,将报告卸载到另一个数据库服务器是个好主意。问题没有提到任何性能问题,只是不必进行连接会使事情“更容易”,因此在这种情况下,视图显然是正确的方法。这正是他的主张,我同意并补充说:如果要反规范化,还应确保定义一些过程或流程,以确保所有反规范化数据保持同步和最新。事实上,问题不在于及时反规范化。但实际上是永久性地去规范化结构。这就是我被要求做的。我的意图是,随着时间的推移,报告的某些要求可能会发生变化,而现在的报告可能会针对每个月或每个季度生成,可能有人希望尽快获得数据,因此困境就产生了。我明白了。目前,这些报告通过SSRS报告查看器实时运行。用户有一系列下拉列表和字段,通过这些下拉列表和字段,他们可以随意更改参数并重新运行。我们当前的规范化模型在这个实时过程中没有性能问题。我并不是为了报表而考虑去规范化。我正在构造一个参数,这样我就不必这么做了。规范化使将数据放入数据库变得更加容易(包括确保所有内容一致等成本)。非规范化使从数据库中获取数据变得更容易。