据我所知,进行标准化是为了避免数据库中的不一致。

通过规范化我们:


减少数据冗余,并且
保护数据完整性。


这就是为什么大多数OLTP数据库都位于3NF中的原因。

来自OLTP的不同数据库汇集在一个数据仓库中。 (DWH,OLAP)。 DWH是非规范化的(1FN),很明显,它必须像这样,因为DWH的主表有数百列。

通过该DWH,我们可以构建多个数据集市,以后将使用它们通过BI报告工具(Cognos,QlikView,BO ..)进行分析。

问题是BI报表的数据模型未规范化。

这不是报表的冗余性和数据完整性的问题吗?

最佳答案

在OLAP系统(例如数据仓库)中,关键的效率需求是查询和数据检索。

因此,即使更新时间可能更长,也要进行一些设计考虑,以便更快地检索信息。

这样的模型的一个示例是Star-Schema,在该模型上,我们以将所有数据都存储在1-join-hop距离中的方式对数据进行规范化。

诸如交易之类的关键元素位于大表(事实)上,外键指向维度。

维度本身较小,并且可能包含未规范化的数据。例如,address维度可以存储街道,邻里和城市数据,而无需将其标准化为3NF

data-warehouse - 如何处理B.I数据模型中的非规范化-LMLPHP

确实存在冗余问题(实际上不必在每个日期行中都存储Day_of_Week),但是它无关紧要(因为在这种情况下,存储不是瓶颈)。

就完整性而言-您只在更新时面对它(例如,在country中每个State_ProvinceDim_Store更改不太现实的情况),在DWH更新中很少见,我们让自己效率低下。

此外,完整性不是由数据库(或规范化)来强制执行,而是由ETL流程的设计和实现来强制执行。

Read more on Data Warehouses modeling

10-08 06:03
查看更多