有位做数据分析的小伙伴问我:老师,你们做商业智能BI的总在讲数据仓库、数据仓库,我感觉在数据仓库上还是跟其它数据库一样操作写SQL就可以跑一些数据出来,感觉跟数据库没有什么区别啊,他们的区别到底在哪里啊?

数据库和数据仓库的区别

事实上,数据仓库和数据库的区别到底在哪里,这个问题其实很多很多人也问过,简单来说:数据仓库的本质就是数据库,存储方式都是一样的。只是两者的定位和服务对象不同、内部的数据组织形式不同。

可以从这几个角度来描述:

第一, 数据库通常服务于业务,数据仓库通常服务于分析。我们通常所提到的数据库一般都是服务于业务应用软件的,不管这些软件是 B/S 架构还是 C/S 架构,例如企业里面常用到的 ERP 系统、OA 系统,或者像我们手机上的点餐 APP、网上购票的 APP 等等。

这些业务系统的特点都是用户在这些软件系统上操作,比如登录、填写个人的信息、修改个人资料、查询一条记录等等,数据通过这些软件程序和背后的数据库进行交互,在底层的数据表上进行增删改查的操作。所以,通常这些数据库是服务于各种各样跑在操作系统之上的各种业务系统、应用软件,更多的面向业务流程、业务管理。

数据仓库 mysql 关系 数据库和数据仓库联系_数据仓库 mysql 关系

业务数据 - 派可数据商业智能BI可视化分析平台

数据仓库就不一样了,它不是服务于业务信息化系统的,它是服务于分析型应用的。更多的是通过各种商业智能BI前端可视化分析工具或者报表工具来访问数据仓库,最终是面向报表查询,数据分析服务的。

第二,数据库的数据来源来自各种业务系统软件程序的产生的数据,或者是由和这些业务系统软件交互的用户产生的数据而数据仓库的数据来源则直接是这些业务系统的一个或者多个数据库或者文件,比如 SQL Server、Oracle、MySQL、Excel、文本文件等。也可以简单理解为很多个业务系统的数据库往数据仓库输送数据,是各个数据库的集合体,一个更大的数据库,数据仓库的建立是要打通这些基础数据库的数据的。

数据仓库 mysql 关系 数据库和数据仓库联系_商业智能BI_02

商业智能BI - 派可数据商业智能BI可视化分析平台

第三,  数据库在设计的时候很少存放历史数据,通常只是描述某一个业务时刻的数据,随着业务系统的变化而变化。数据仓库为了分析的目的会存放大量的历史数据,因为是每天抽取业务系统数据库的数据每天存放起来,大部分的数据都是静态的。

第四,  最核心的区别在于建模方式和数据的冗余。业务系统的数据库为了实现一个业务流程,在表的设计上通常采用的是三范式 3NF 建模方式,最小原子列不可细分、主外键等,通过一对多或者多对多的形式,减少数据冗余。而数据仓库在建模方式上既有三范式 3NF 建模,也有维度建模比如星型或雪花型的建模方式,通常一般都是使用 Kimball 的维度建模。

数据仓库 mysql 关系 数据库和数据仓库联系_商业智能BI_03

建模方式 - 派可数据商业智能BI可视化分析平台

像Kimball的这种维度建模的方式都是反规范性设计的,保留了大量的数据冗余,为了查询的效率。所以,业务系统的数据库更多的是增删改操作,而数据仓库更多的是查询操作,这就决定了建模方式会有很大的差异。一个是面向业务流程,一个是面向分析服务。

同时,为了底层架构的稳定性和健壮性,数据仓库还会进行底层表的分层设计,比如经常看到的 ODS 层、Staging 层、Trans 层、Dimension 层、Fact 层、Data Mart 层等。这种分层的好处就是解耦,隔离底层业务系统的变化对上层模型以及页面的影响,也便于后期的数据维护。

数据仓库 mysql 关系 数据库和数据仓库联系_数据_04

              数据仓库 - 派可数据商业智能BI可视化分析平台

简单总结一下:数据仓库的本质仍然是数据库,只是服务对象不同。一个是服务于业务系统,一个是服务于商业智能BI可视化分析。服务对象的不同决定了数据库底层的数据组织形式主要是以三范式建模,来适应业务系统频繁增删改的需要。

而数据仓库为了业务分析的目的,因此需要拉通各个业务系统数据库的数据,保留大量历史数据,同时为了分析效率的提升改变了传统数据库的数据组织形式,例如利用适合于分析型模型的Kimball维度建模方式来组织底层数据架构。数据库服务于业务流程,通过业务软件来访问;数据仓库服务于商业智能BI分析,通过商业智能BI前端可视化分析工具来访问。