交易和报告数据库 - 如何?

Sar*_*raz 8 .net database sql-server

构建具有高度规范化的数据库的事务系统时,运行报告样式查询,甚至在UI上显示数据的查询都可能涉及多个联接,这在数据繁重的情况下可以并且通常会影响性能.加入很贵.

通常,所提供的指导是您永远不应该从事务性数据库模型中运行这些查询,而应该使用针对特定UI视图或报告而定制的非规范化展平模型,从而消除了对许多联接的需要.在这种情况下,数据复制不是问题.

这个概念很有意义,但是当专家发表这些陈述时我很少看到的是如何实现这一点.例如,(并且坦率地说,我很欣赏使用任何平台的示例)在sql server后端运行的中型系统中,您有一个规范化的事务模型.您还有一些报告和需要查询的网站.因此,您创建了一个"报告"数据库,可以平滑规范化数据.你如何保持同步?交易日志运送?如果是这样,您如何转换数据以适应报告模型?

Joe*_*lli 3

在我们的商店中,我们设置了从 OLTP 系统到另一个用于报告的数据库服务器的连续事务复制。您不希望为此目的使用日志传送,因为每次恢复日志时都需要对数据库进行独占锁定,这会阻止您的用户运行报告。

借助当今 SQL Server 中的优化器,我认为规范化数据库上的联接对于报告来说“成本太高”的观念有点过时了。我们的设计完全是第三范式,主表中有几百万行,并且运行任何报告都没有问题。话虽如此,如果情况紧急,您可以考虑在报告服务器上创建一些索引视图来提供帮助。