代码之家  ›  专栏  ›  技术社区  ›  Travis Heseman

为了报告而取消活动数据的规范化-好还是坏?

  •  7
  • Travis Heseman  · 技术社区  · 15 年前

    由于企业应用程序数据库会使编写报告变得更容易,因此它的优点/缺点是什么?

    在SSR中进行专业设计的报告可能更容易,因为不需要任何连接。

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

    其他?

    6 回复  |  直到 8 年前
        1
  •  19
  •   Bob    15 年前

    为了报告而非规范化是不好的,M'kay。

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

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

    这就是您希望规范化数据库的原因。

    1. 将关系集合从不需要的插入、更新和删除依赖项中释放出来;
    2. 在引入新的数据类型时,减少重组关系收集的需要,从而延长应用程序的寿命;
    3. 使关系模型对用户更具信息性;
    4. 使关系的集合与查询统计信息保持中立,在查询统计信息中,这些统计信息可能随着时间的推移而变化。

    “数据库关系模型的进一步规范化”通过 wikipedia

        2
  •  6
  •   ennuikiller    15 年前

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

        3
  •  4
  •   HLGEM    15 年前

    不要仅仅为了消除报告的复杂性而取消规范化,否则会在应用程序的其余部分造成巨大的问题。或者你不执行导致坏数据的规则,或者如果你这样做了,那么插入、删除和更新对于每个人(不仅仅是运行报表的两三个人)来说都会严重减慢。

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

        4
  •  2
  •   Nicolas Dorier    15 年前

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

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

        5
  •  1
  •   kurast    15 年前

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

        6
  •  0
  •   JB King    15 年前

    另一个缺点是,数据可能不是实时的,因为有一些时间在数据周围移动,使其从规范化的形式变为非规范化的形式。如果有人希望报告能在收到请求的那一秒之内完成,那么在这种情况下就很难做到。

    如果这是原始日志中同步的副本,很抱歉我没有完全看到这种情况。