我开始学习SQL Server Analysis Services,我正在研究training book以及Developer Training Kit。在这两者中,我发现建议OLAP数据库中使用的表数(理想情况下,星型模式)从生产OLTP数据库中大大减少。
来自培训套件:
我们遵循数据维度方法来构建数据集市架构。在操作数据库中的大约200个表中,数据集市模式包含大约10个维度表和2个事实表。
根据我的理解,操作数据库通常(有些)规范化,数据集市模式严重非规范化。我还认为,非规范化数据通常涉及添加更多表,而不是更少。
除非您只需要报告数据子集,否则我无法看到如何从200个表转到12个表。如果您只需要报告数据的子集,为什么不能只使用操作数据库中的相应表(除非使用非规范化的星型模式可以获得显着的性能提升)?
答案 0 :(得分:5)
非规范化与规范化数据库完全相反。在规范化的数据库中,所有内容都会分散到不同的表中,以支持对数据的并发写入。这也具有仅产生任何给定数据子集一次的副作用(在理想的第三范式数据结构中)。规范化的缺点是读取需要花费更长的时间,因为数据是分散的,我们需要连接表来再次理解它(连接是相当昂贵的操作)。
当我们进行非规范化时,我们从多个表中获取数据并将它们合并到一个表中。所以现在我们在这些表中重复数据。重复数据很有用,因为我们不必再连接任何其他表来获取它。写入数据存储通常是一个坏主意,因为这意味着很多写操作会更改表中的所有数据,而在规范化数据库中只需要一个。
OLTP代表在线交易处理,请注意“交易”一词。事务是写操作,并且为此优化了OLTP模型。 OLAP代表在线分析处理,分析是关键字,意味着大量读取。
在OLTP到OLAP进程中从200个表到12个,可以令人惊讶地保留OLTP数据库中的几乎所有数据以及更多数据。 OLTP无法记录所有更改,但OLAP专注于此,因此您可以获得所有历史数据以及当前数据。
星型模式可能是OLAP数据存储最常见的,雪花模式也很常见。您应该了解两者以及如何正确使用它们。这只是你军火库中的另一个伟大工具。
来自IBM的这两本书将会更加充分地回答您的问题,并且它们是免费的PDF格式。
http://www.redbooks.ibm.com/abstracts/sg247138.html
http://www.redbooks.ibm.com/abstracts/sg242238.html