00:00
好,那截止到目前为止呢,咱们是把整个的分层以及架构这块内容呢搞定了,也就是说我们整个的了解完了第一章啊,第一章好,那接下来我们大家说啊,呃,第二一直到这个第五章。也就是说,二三。四五啊,这几章内容在这儿,放在这儿,我带着大家去过一遍。啊,如果说你中间有细节不太了解的,比如说我们的维度建模这块,对吧,比如说像我们的维度表实时表,实时表的分类。对吧,以及我们最后要介绍的,哎,再往下。设计里边的什么,特别是DWS。DWS叫指标提建设,像这种涉及到特别细节的内容,如果说你不是特别清楚,现在啊,不是现在啊,就是晚上你稍微的把离线数仓那个点再去看一看。
01:04
啊,要去回顾一下。咱们班同学一样,未来通过网络学习到本次课程的同学也一样,也跟你们说清楚OK吧,因为我们之前在离线收仓当中已经做过详细的介绍了,花了很长很长的时间专门去介绍这个理论,现在呢,我们只是带着大家过一下文档,然后呢回顾一下,不做具体的介绍了,需要了解的或者是忘了的,对吧,那。要移步到我们离线收仓啊,把这个理论部分去掌握一下,OK吧,啊好,呃,那第二章讲的是数据仓库建模的一个概述啊,我们要建模,那要做分层对吧,每一层怎么处理好,其实为的是什么事呢?就这。高性能,低成本,高效率,高质量,其实分层的一个好处呢,最大的啊,能做到这些东西的时候,其实又提高了什么。
02:05
复用性。对吧,最重要的我们提高了每一张表,或者说每一个数据的叫复用性,可以被重复利用。一旦重复利用了。你想想看。是不是这些东西能保证,那我们看高性能。啊高性能对吧,那这个呢,我们那也就说你好像重复利用并不能体现这个高性能,那这个我们跟存储框架等等这些东西有关系。对吧,第二个成本。那必然降低成本了,提高了费用性,减少了,重复计算成本降低了,对吧,高效。啊,那你两个数据模型,那我们按照一定的规划好建表的未来取数据呢。根据你想要的,你一定要取到你想要的内容。而不是说特别混乱,如果说我需我需要找一个什么内容。
03:03
对吧,在用户体验上面,我可能针对一个非常混乱的数据。我们根本没有没有可能做到这个高效对吧,高效讲的是什么呢。第一,你可以说查询速度快,这是搞笑吧,是。对吧,当然这个也属于高性能啊,更重要的是什么呢?我自己要找一个数据。我可以通过最少的步骤把它找到。对吧,最少的join等等这些方式,那这个也属于高效,最后高质量,高质量因为我们提供了一个复用性的表,对吧,这样就更不容易混乱,因为如果说每个人用到这个数据呢,他需要自己去建表。那可能你的口径,每个人见的口径都不一样。比如说我要求一个日活。对吧,那我们现在已经知道了,日活呢,是站在麦迪的角度上来说的。
04:04
对吧,针对于当天的数据呢,按照mid做去重。啊,那那有没有可能有的人想的是我要求日活对吧,我是站在UID的角度上了。如果说你让不同的人去设计,对吧,没有统一,没有规划。那有的人见表日活,诶按照这个mid口径,有的人呢,按照UI口径,那最后出来的结果。就完全不一样了。对吧,啊,你这个数据质量没办法得到保证啊,所以其实最根本的一个点还是我们分层之后呢,提高了复用性,对吧?好,那我们再看一下建模方式,建模方式呢,这里边儿像传统的。关系型数据库对吧,我们可以用这个液压建模啊,俗称这个范式理论啊,那这里面呢,分为我们。起码要保证的是。如果说对于。买这这种关系型数据库要做增删改查。
05:03
类似于这样操作的一类数据建模,对吧,那我们遵循范式理论,一般来说呢,到三范式。其实就够了对吧?好,那大家分别还记得三范式指的是什么东西。一范式是什么?我们这块都是回顾啊,对吧。第一份是讲的是什么事,它能够起到什么样的一个作用。一范式讲的,哎哎,没问题啊,叫属性不可分割对吧?啊,属性不可分割它的好处在于什么?
06:04
啊,这个有什么好处,这个没什么太多可说的,对吧。啊,你有一个朋友啊,像这种就不行对吧。好,好,那好处在于什么?便于计算啊,没问题,其实都不能叫便于计算了,就是如果说你属性还能分割,你都不能计算。对吧,啊就所以说呢,不叫便于计算,我们就直接什么,为了可以计算。对吧,啊,它不是说便于计算,因为你是可以与不可以的区别啊,不是说麻烦与简单的区别,对吧,那如果属性还能分割,假如说像。凯总所说对吧,我有一个朋友啊,一个朋友五个朋友,那这个朋友很有问题对吧?好,那接下来二范式呢,讲的是什么?
07:01
二反式。不能存在什么。啊,不能存在部分函数依赖,对了,不分依赖,这个好处是什么?它的好处是什么?我们把部分函数依赖干掉,它有什么好处?我们如果说消除了部分函数依赖,它的好处在于还减少数据冗余,没毛病啊,减少数据冗余啊,这个呢,可能大家都比较清楚一点,对吧,因为我们把这种所谓的部分函数依赖是什么意思啊,就是啊,那AB。指向一个C,但实际上呢,A它自己就能够推出来这个C。
08:05
对吧,就能够推出来C,但是呢,你这个放在一起,这个B啊,就是一个容字段了,就没必要。对吧,你B存多了,你不如存一个AC,存一个AB。存两张表对吧?啊,那你这个B呢,必然是等于减少了。啊,因为你这里边只要存一个ID就够了啊,另外存一个ID对吧,当然你肯定还有其他数据啊,我们只是拿三个来说的啊好。呃,那三范式讲的是什么事啊?第三份是。这个加个D啊,因为这样的话好像是。第三问是。怎么说不能存在?对了,叫传递函数依赖,那么它的好处呢?
09:09
它的好处是什么?第三问是对吧?我们减少了这个传递函数依赖,嗯,一样的减少数据冗余,增强数据一致性,对了啊,哎,只有这个方总一个人在回答,其他同学呢,都忘完了是吗?还是咋了,还是懒呀。是忘完了吗啊。第一,减少数据冗余,第二,增加数据的一致性,没毛病。对吧?啊,那接上数据冗余还是一样的,因为你在一张表里边存过多的一个字段,你都得写上,对吧,没有我们直接存一个ID这样简单啊,数据没有那么多,因为你存真正的数据跟我存一个ID肯定还是不一样的,对吧?那增加数据的一致性,这个该怎么理解呢?
10:08
主要在于我们。啊,方总是大佬是吧?啊范式理论这个呢,是关系型数据库的一个理论对吧,它是针对于关系型数据库使用的啊,它是关系型数据库使用的,那关系数据库呢,做最多的增删改查啊做CD对吧,这四个操作好,那从这个角度来说,我们就能。了解到它为什么可以增加数据的一致性。对吧,它可以增加这个数据的一致性,好,那比如说我们来说一个传递函数依赖啊,传递函数依赖它讲的什么呢?是A可以推出来B,根据B能推出来C,但是C它不能不能咱们就这样写。
11:06
可以吧啊。好,同时啊。同时满足C。推不出来A。啊,这样的一个要求,对吧,这个叫。传递很容易的啊,那我们不希望在表里边能有这个操作啊,那比如说我们都知道有这个,比如说我们有这个。嗯,就是还是拿大家之前学的例子吧,一个系对吧?呃,我能干什么呢?我能通过学生。推出来。就是学生对吧。推出来它所在的。系。啊,然后呢,通过这个系,我们是不是知道这个系的系主任,换句话说,我知道这个学生其实也就知道了他的系主任是谁,但是你有系主任是不是推不出来。
12:10
他对应的学生是谁呀,对吧?哎,他就一对多的关系了啊,那一个学生理论来说就一个系嘛,那也是说哎,我修的双学位对吧,我存在两个系,这种情况我们不聊。对吧,这种情况不聊我们就聊一个的啊,你这种例子你肯定能举出来啊好,那么。系主任呢,是推不出来学生的,因为它是一对多的关系,这个呢就构成了一个传递函数依赖对吧,在一张表里边,其实我们应该把这个东西干什么呢?把它分开,分成两张表,第一个学生跟系对吧,然后呢,还有一张表是系跟系主任单独的。一张表。啊,我们搞一个单独的一张表,对吧,类似于这样子的啊,那现在呢,我们如果把它放在一张表里边儿。数据冗余了啊,为什么呢,比如说系呢,我我假如说只有五个系。
13:06
我只有五个系对吧,那你。C跟系主任单独存,那就五条数据呗。对吧,好,那如果学生有200个,比如说啊,学生有200个,好,那你这个系跟系主任这个数据总的是不是存了200份。因为每个学生你都要存,对吧,系主任是谁,这里面呢,就有大量的数据重复。大量的数据重复对吧,属于这个语言系。对吧,计算机系。啊,然后呢,通信啊,类似于这样的东西啊,什么采矿对吧,好,那系主任邀请张三李四王五。对吧,啊,写了200份啊,里边有大量的冗余,那如果说我只是存学生加系,我只要存学生以及系12345就够了,存一个数字对吧,到底是几系的12345,然后呢,你找到这个系主任,系名系主任对吧,在这边存着哎。
14:00
ID是12345,然后呢系就刚才我们说的有这个通信对吧,计算机啊采矿,然后呢,张三李四王五就存这一份啊这里面呢,就是一个系的ID,是不是数据冗余确实降低了,其实在第二范式当中也是一样道理,对吧,减少数据冗余,那这个一致性该怎么理解的,注意这个一致性呢,体现在我们这个当中的一个删除操作。填在删除操作,那如果说咱们这张表这样放的就一张表,没有系跟系主任单独的表对吧?好,那么你这个时候去求一下,我们总共有多少个系,你呢?呃,取这个值,然后去重得到这个结果,比如说现在一个什么情况呢,也有这样情况,现在你你知道像那种什么什么那个叫爬,爬行动物,什么五角爬行动物,什么什么研究学对吧,类似于这种学科,这种系一般可能。好多年,就那么一个学生。有可能吧,对吧,好多年就这么一个学生,好那么在这里边存着,哎,有这个系对吧,什么。
15:07
软体动物什么软体爬行动物什么研究学校,假如说这样的一个学科,对吧,他只有一个人,只有一个人呢,他进来,哎,这个系呢,正常在对吧,假如说这个学生毕业了。这个学生毕业了,毕业了呢,我们就可能把它从我们的学籍档案里边,在校生里边把它干什么,把它删掉,对吧,这个删掉你发现如果说你把这些东西存到一张表里边儿,这个学生毕业,你把它删掉了,你不光删的是学生,你还把什么删掉了。啊,还把什么东西给删掉了,除了这个学生学籍档案,在在校生里边把它去掉了。还有什么?
16:01
对了,把这个系以及这个系主任。都干掉了。对吧,啊,咱把这个系跟系主任都干掉了啊,系直接没了,系主任也没了,那肯定不行,对吧,你再去求,哎,我看一下这个学校现在有多少个系,一查跟之前一比少了一个。少了一个对吧,那不行啊,所以呢,从这个角度来说,诶没有这个传递函数依赖增加了数据的一致性,对吧,主要的原因在于关系型数据库,它是做增删改查。啊,他都要做啊,他都要做对吧,所以尽量的给它拆开。啊拆开啊,不互相干扰对吧,各个数据呢,不互相产生干扰啊,如果说传递函数依赖你就干扰了啊。好,这是我们所说的关系型数据库,它这个建模方式OK吧?
我来说两句