汤 --> 饼丝 --> 中原地区最大的饼丝供应商 --> 做供应链生意的
马化腾 又变成首富了 --> 全球最大的社交媒体老板 --> 做游戏的
如果把数据看作图书馆里的书,我们希望看到它们在书架上分门别类地放置;如果把数据看作城市的建筑,我们希望城市规划布局合理;如果把数据看作电脑文件和文件夹,我们希望按照自己的习惯有很好的文件夹组织方式,而不是糟糕混乱的桌面,经常为找一个文件而不知所措。
数据仓库中就是存放了大量的规矩数据,非常清晰明了。
数据模型就是数据组织和存储方法,它强调从业务、数据存取和使用角度合理存储数据。只有将数据有序的组织和存储起来之后,数据才能得到高性能、低成本、高效率、高质量的使用。
所谓的数仓建模:按照固定的方,将数据摆放整齐,分层明确,便于存取。
高性能:良好的数据模型能够帮助我们快速查询所需要的数据。
低成本:良好的数据模型能减少重复计算,实现计算结果的复用,降低计算成本。(比如:查找A指标,这个时候你可以将一些中间的过程数据存储起来,便于下一次查询B指标的时候使用。)
高效率:良好的数据模型能极大的改善用户使用数据的体验,提高使用数据的效率。(数仓是一个公共的地方,至少别让同事骂你。)
高质量:良好的数据模型能改善数据统计口径的混乱,减少计算错误的可能性。(比如 张三说性别使用 男 女 ,李四自己搞了一个数仓,男使用man,女使用woman)。
数据仓库之父Bill Inmon提出的建模方法是从全企业的高度,用实体关系(Entity Relationship,ER)模型来描述企业业务,并用规范化的方式表示出来,在范式理论上符合3NF。
1990年提出数据仓库的概念,因为太超前,很多企业根本就没有那么多数据。
3NF-- 三范式,面试基本会问。
1)实体关系模型
实体关系模型将复杂的数据抽象为两个概念——实体和关系。实体表示一个对象,例如学生、班级,关系是指两个实体之间的关系,例如学生和班级之间的从属关系。
什么叫做关系型数据库?
通过行和列表示整个世界万事万物的数据库。
2)数据库规范化
数据库规范化是使用一系列范式设计数据库(通常是关系型数据库)的过程,其目的是减少数据冗余,增强数据的一致性。
所有的关系型数据库:设计的核心宗旨--> 不要有冗余数据。
这一系列范式就是指在设计关系型数据库时,需要遵从的不同的规范。关系型数据库的范式一共有六种,分别是第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、巴斯-科德范式(BCNF)、第四范式(4NF)和第五范式(5NF)。遵循的范式级别越高,数据冗余性就越低。
冗余:多余的意思,数据冗余,有些数据在一个地方存储了,在另一个地方又存储一遍,就叫冗余。
数据库的事务也是有级别 --> 假如拉最满,就是锁表。
设计数据库的时候虽然有6范式,但是不能遵循的太狠,一般到3NF即可。
3)三范式
(1)函数依赖
(2)第一范式 维度不可分
(3)第二范式 部分函数依赖
(4)第三范式 不存在传递函数依赖
2.2.2 维度模型
因为ER模型用不了,所以有大师提出了令一种模型--维度建模法
数据仓库领域的另一位大师——Ralph Kimball倡导的建模方法为维度建模。维度模型将复杂的业务通过事实和维度两个概念进行呈现。事实通常对应业务过程,而维度通常对应业务过程发生时所处的环境。
总结规律的叫大师。
牛顿:物理学力学三大定律
爱因斯坦:相对论
事实表: 描述操作的,一般都是动词表,比如订单表 谁在什么时候购买了什么商品。
维度表: 就是名词表 ,比如 用户表 国家表 商品分类
注:业务过程可以概括为一个个不可拆分的行为事件,例如电商交易中的下单,取消订单,付款,退单等,都是业务过程。
业务过程:就是一个动作,比如下单。
下图为一个典型的维度模型,其中位于中心的SalesOrder为事实表,其中保存的是下单这个业务过程的所有记录。位于周围每张表都是维度表,包括Date(日期),Customer(顾客),Product(产品),Location(地区)等,这些维度表就组成了每个订单发生时所处的环境,即何人、何时、在何地下单了何种产品。从图中可以看出,模型相对清晰、简洁。