据我所知,进行标准化是为了避免数据库中的不一致。
通过规范化我们:
减少数据冗余,并且
保护数据完整性。
这就是为什么大多数OLTP数据库都位于3NF中的原因。
来自OLTP的不同数据库汇集在一个数据仓库中。 (DWH,OLAP)。 DWH是非规范化的(1FN),很明显,它必须像这样,因为DWH的主表有数百列。
通过该DWH,我们可以构建多个数据集市,以后将使用它们通过BI报告工具(Cognos,QlikView,BO ..)进行分析。
问题是BI报表的数据模型未规范化。
这不是报表的冗余性和数据完整性的问题吗?
最佳答案
在OLAP系统(例如数据仓库)中,关键的效率需求是查询和数据检索。
因此,即使更新时间可能更长,也要进行一些设计考虑,以便更快地检索信息。
这样的模型的一个示例是Star-Schema,在该模型上,我们以将所有数据都存储在1-join-hop距离中的方式对数据进行规范化。
诸如交易之类的关键元素位于大表(事实)上,外键指向维度。
维度本身较小,并且可能包含未规范化的数据。例如,address
维度可以存储街道,邻里和城市数据,而无需将其标准化为3NF
。
确实存在冗余问题(实际上不必在每个日期行中都存储Day_of_Week
),但是它无关紧要(因为在这种情况下,存储不是瓶颈)。
就完整性而言-您只在更新时面对它(例如,在country
中每个State_Province
的Dim_Store
更改不太现实的情况),在DWH更新中很少见,我们让自己效率低下。
此外,完整性不是由数据库(或规范化)来强制执行,而是由ETL流程的设计和实现来强制执行。
Read more on Data Warehouses modeling