【问题标题】:De-normalize live data for the sake of reports - Good or Bad?为了报告而对实时数据进行非规范化 - 好还是坏?
【发布时间】:2010-12-18 20:23:21
【问题描述】:

非规范化企业应用程序数据库有哪些优点/缺点,因为它会使编写报告更容易?

专业版 - 在 SSRS 中设计报告可能会“更容易”,因为不需要任何连接。

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

其他?

【问题讨论】:

  • 我实际上并没有考虑为了报告而去规范化。我正在构建一个论点,这样我就不必这样做了。
  • 规范化使将数据放入数据库变得更加容易(包括确保一切一致的成本)。非规范化使从数据库中获取数据变得更加容易。

标签: report normalization relational-database


【解决方案1】:

为了报告而进行非规范化是不好的,好吧。

创建视图或非规范化数据仓库都很好。

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

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

  1. 将关系集合从不需要的插入、更新和删除依赖项中解放出来;
  2. 减少随着新类型数据的引入而重新构建关系集合的需要,从而延长应用程序的生命周期;
  3. 使关系模型对用户提供更多信息;
  4. 使关系集合对查询统计信息保持中立,因为这些统计信息可能会随着时间的推移而发生变化。

——E.F. Codd,“数据库关系模型的进一步规范化”,来自wikipedia

【讨论】:

  • 查看并不总是答案,尽管有很多人推荐它们。如果您因为高度规范化的数据库设计而有一个复杂的连接,那么视图的运行时间可能会变得不可接受。
  • 我同意欧文,如果问题是性能,观点将无济于事
  • 那就用数据仓库吧。无论如何,将您的报告加载到另一个数据库服务器是个好主意。
  • 这个问题没有提到任何关于性能问题的内容,只是不必进行连接会使事情变得“更容易”,因此在这种情况下,视图肯定是正确的方法。
  • 这只是他的专业,不是明确的要求
【解决方案2】:

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

【讨论】:

  • 我同意并补充:如果您要进行反规范化,您还应该确保定义一些程序或流程以确保所有反规范化数据保持同步并且最新的。
【解决方案3】:

不要仅仅为了摆脱报告的复杂性而进行非规范化,这可能会给应用程序的其余部分带来巨大的问题。要么你不强制执行导致错误数据的规则,要么如果你这样做了,插入、删除和更新可能会严重减慢每个人,而不仅仅是运行报告的两三个人。

如果报告确实无法正常运行,则创建一个非规范化的数据仓库,并将其填充到每晚或每周的订阅源中。通常需要这种报告的类型通常不关心数据是否是最新的,因为它们通常是在事后处理(尤其是汇总)大量数据的月度、季度或年度报告。

【讨论】:

    【解决方案4】:

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

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

    【讨论】:

      【解决方案5】:

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

      【讨论】:

        【解决方案6】:

        另一个缺点是数据可能不是实时的,因为数据从规范化形式变为非规范化形式需要一段时间。如果有人希望报告在被请求的那一刻完成,在这种情况下可能很难做到。

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

        【讨论】:

        • 实际上,问题不在于及时去规范化。但实际上永久性地对结构进行非规范化。这是我被要求做的。
        • 我的意图是报告的某些要求可能会随着时间的推移而发生变化,而现在的报告可能会生成每个月或每个季度的报告,但有人可能希望尽快获取数据,因此出现了困境。
        • 我明白了。目前,报告通过 SSRS 报告查看器实时运行。用户有一堆下拉菜单和字段,他们可以通过它们更改参数并随心所欲地重新运行。我们当前的标准化模型在这个实时过程中没有性能问题。
        猜你喜欢
        • 2018-02-07
        • 2017-01-27
        • 2017-10-05
        • 1970-01-01
        • 1970-01-01
        • 2013-06-30
        • 2018-12-12
        • 2013-03-08
        • 2010-10-22
        相关资源
        最近更新 更多