00:00
把它点开啊,咱先看第一范式啊,那第一范式啊,它的这个呃,核心原则,核心原则啊就是属性不可切割,属性不可切割,呃,这块咱们得先明确啊,这个所谓的属性是什么。所谓的属性是啥呀?啊对,就是字段,我们因为现在目我们的对象是表对吧,所谓属性就是表里边的一个一个字段,也是我们的每个字段必须得是不可分割的啊,这得明确,那下边有一个小例子,这个是一个不符合第一范式的这个表格设计,它是不符合第一范式的,哪块不符合呢?就是这个商品字段,这张表呢,应该是属于属于一个比较简陋的一个订单表,对吧?啊,应该里边存储了,就是哪个用户买了什么商品,对不对啊,那你看一下他买商品,他买的商品是啥呀,是五台电脑,这显然这个东西它不是一个原子性的吧,它是可以切割的,他可以切割成什么呀,可以说数量和商品对吧?那所以它诶是不符合第一范式的啊,那符合之后呢,诶,那这张表呢,应该得变成这种才行啊,这是咱们这个所谓的第一范式的核心原则,这个其实也是最简单的一个原则,因为这个属性它能不能切割,咱是不是一眼就能看出来啊,啊所以说咱们再去进行这个数据的这个设计的。
01:17
的时候呢,第一范式就是你无形之中,其实你就遵守了啊,无形之中就遵守了,这这个呢,其实啊,就一一般正常人啊,不会犯这个第一范式的一个错误啊啊这个肯定是没问题的啊呃,这个是最简最简单的一个,当然也是最基本的一个要求啊,关形数据库啊,至少得要求你满足第一范式啊好,那这个咱们快速的过比较简单啊好,那满足了第一范式之后,是不是就可以去谈第二范式了呀,来看一下第二范式。啊,第二范式,那第二范式的核心原则是什么呢?是不能存在部分函数依赖啊,那当然这句话呢,说的也是比较简单啊,呃,它没有补全完整,咱们应该给它补全完整啊,因为咱们这是不是提到不能存在部分函数依赖的呀,既然提到函数了,那咱里边是不是就得有一个所谓的自变量以及所谓的因变量啊,对不对,也得有X有Y,对不?咱得明确是谁不能函数依赖于谁对不对啊,谁不能部分函数依赖于谁,咱们得搞清楚对吧?那在这儿啊,咱们所谓的自卑量应该指的是谁呀?
02:25
所谓的自变量应该指的是咱们这张表当中的主见字段啊,然后这个因变量是什么呢?就是所谓的非主键字段啊,所以说这句话呀,咱们要说完整的,这应该怎么说?就是不能存在非主键字段部分函数依赖于主键字段的现象。啊,这就是咱们第二范式的核心原则,我再把这句话重复一下,第二范式的核心原则是部能存在非主键字段,部分函数依赖于主见字段的,哎,这样的现象啊,能搞清楚吧?啊好,那接下来咱们再往下看啊,再往下看,那看一看这块咱们这张表当中啊,是否有这个所谓的诶,部分函数依赖来看一下,这还是刚才那张成绩单对吧?那这张成绩单当中明显咱的数据是什么样的呀?
03:15
明显是冗余的吧,你看。部分是不是都一样,那这部分也都是一样的啊,这些都是一样的,明显是存在这个数据的冗余现象的啊啊,那下来咱们看看怎么去消除啊,嗯,看一看它是不是这个违背了第二范式啊,部分函数那有没有违背是不是咱就去找一下有没有这种部分函数依赖呀,对吧?啊那刚才说了部分函数依赖里边咱们这个X因变自变量指的是主键,那所以咱们第一步要做的事就是先明确这张表它的主键是谁吧。啊,这上面主页是谁呀。思考一下谁呀?学号是吧?你的学号行不行?主件要求是什么?主件的目目标那个作用是啥呀?呃,唯一标识一行数据,那这句话大家都会说,都会说你怎么还选还选学号呢?那学号能唯一标识吗?
04:07
肯定不能啊,你这个是不是来来了一同一个学号里边有好几行啊,那这叫唯一标示一行嘛,那肯定不是,那所以学号是不能作为主见的啊,谁作为主见呀?哎,没错啊,咱这其实是疫情都标红了啊,红了都看不出来啊,这个它就是一个什么,它就是一个联合主建,相当于是啊是学号和科名啊,他们作为一个联合主件或者叫做复合主件啊,那这本身就是一个成绩单嘛,成绩单是不是就该存储,哪个学生的哪一科考了多少分啊啊所以说那这个很显然这是一个联合主见啊好,那咱们明确主见了,那接下来咱们就看一看啊,有没有这个非主键字段,是部分函数依赖于咱们这个主见的,那咱们从第一个阶段开始吧,从学二开始。呃,从从从这个这个姓名开始啊,姓名开始,那姓名是不是部分函数依赖于序号了呢。和加课名了呢。
05:00
是不是是吧,因为姓名其实只要拿到学号,我是不是就能得到这个姓名了,那很显然这个姓名这个字段就是部分函数依赖于咱们的主见的,那接下来第二个字段,姓名。是不是也是一样的呀,我只要给你个学号,你是不是就知道他是哪个系的了啊,跟课名没关系啊,那系主任呢?啊,一样的道理呗,给你学号你知道你系主任是谁了啊,比如说给给就是这个意思嘛,啊OK,那这块咱们呃明确了之后,也就是这仨字段呢,很显然是有问题了,那看最后一个分数字段,分数字段它是不是不分函数依赖逐间的呢?是不是这个不是啊,因为我要想得到一个具体的分数,是必须得同时告诉我学号,可课名啊,我觉得它是完全函数依赖,那很显然这仨字段呢,是部分函依赖,那咱是不是就得想办法去消除这个部分函数依赖啊,那怎么消除啊?怎么消除?怎么消除?其实很简单啊,你不是说这个这这三字段跟他是没有关系,没关系,我怎么办。
06:05
直接拆了呗,对不对,你看啊,咱们进行规范过程,非规范化的过程当中,你就会拆表啊,你看这张表最终呢,被拆成了咱们以下这个样子啊,你看一下,那拆完之后呢,那有部分函数依赖的这三字段是不是跟课名没关系,我就跟他不放在一起了呀,哎,我单独整一张表啊,单独整一张表,那张表呢,逐渐就是学号剩下的所有的字段是不是都是跟他这个呃都都不是部分还是依赖的呀,对不对啊,是这样的啊好,那咱们先诶把这一点明确啊,这点明确啊,那然后呢,看左边那左边呃,这个学号课名分数这个肯定是没问题的。好,那经过咱们这个操作之后呢,你会发现啊,这个数据的冗余现象是不是已经消失了一大部分了呀,对不对,那原来存三遍的,我这儿是不是只存一遍是这样的。好,那也就大家能发现第二范式是能消除掉一部分数据冗余的,那注意我说的是一部分对吧,你会发现啊,即便是进行了第二范式的规范化,那咱们这张表当中啊。
07:08
这个冗余现象还是没有完全消失,对不对,你看这。对吧,你看这个跟系相关的一些信息经济系,然后呢,这个什么,呃,系主任王强,那这个是不是还是重复的呀,啊还是有冗余啊,还是冗于,那这个是由于第二份是导致的吗。就不是了,为什么?因为咱们已经消除了第二范式了,对吧?啊,消除了这个部分函数依赖了,那就不是第二范式的问题了,那应该是谁的问题啊,第三范式了啊来咱们往下看看第三范式。来这个大家先忽略啊,这个PPT的一个顺序有问题,咱不看它啊,咱们看上面,哎,这个呢,就是咱们第三范式的核心原则啊,第三范式的核心原则啊,那核心原则是啥呢?是不能存在传递函数依赖啊,当然这句话说的其实也不是很明确,也不是很完整,那咱们要说完整的应该怎么怎么去说呀。
08:01
应该是不能存在啊,非主键字段传递函数依赖于主键字段的这个现象。是不是应该是这么去说呀,再重复一下啊,不能存在非主键字段传递函数依赖于主键字段的现象啊,啊,这得明确啊好,那我们来看一下啊,这是刚才我们拆出来的,那那那一张表对吧?那这张表里还是由这个冗余现象啊,那接下来咱们就看一看啊,这个冗余现象是不是由咱们这个传递函数依赖导致的,那接下来咱是不是就得去找一找,看一看咱们这张表当中目前是不是有这个所谓的传递函数依赖对吧。啊,来看一下,找一找,怎么怎么去找啊。这个传递函数依赖呢?找起来要复杂一些,什么叫传递函数依赖呀?什么叫传递函数依赖?比如说我这个依赖于这是不是可以,哎,比如说啊,我从这能得到它对不对,那比如说我从这我也能得到它啊,那这是不是就是传递函数依赖对不对啊,那咱们怎么去找这个传递能不能怎么去找有没有传递函数依赖呢?
09:03
你要想去找有没有传递函数依赖,那你就得把什么呀,把这张表当中所有的函数依赖关系是不是都得找出来。对不对,那咱们刚才你找那个第二范式,是不是只是以谁为为X就行了,以主键为X就行了,那这块那就不行了,是不是任意一个字段都有可能作为X啊,对吧,咱们所以说得把所有的函数关系都找出来,这个比较麻烦啊,咱们一点来吧,啊还是先看主键吧,现在以主键作为这个自变量啊,那学号能不能得到姓名。可以吧,那娟儿能不能到系名呢?没问题,那能不能得到系主任呢?可以,没问题啊,好,那现在咱们看以姓名作为自变量。姓名作为自变量,那姓名能不能推出学号?能不能给你个姓名,能不能选号。这个好像不行不不行啊,对,有重名的问题对吧?啊,因为学号不重复,但是姓名可能重复啊,那姓名重复的话,比如说有两个叫李晓明的,那我给你个李晓明,你是不是得到俩学号啊,那这还叫函数吗?首先。
10:08
是不是不叫了,因为函数咱们有要求是一个X只能得到一个Y对吧,它连函数都不是,就更别提什么函数依赖的对吧,所以这个肯定是不行的啊,那姓姓名能不能叫系名呢。可不可以,呃,也不行,为啥,因为还是重名的问题嘛,啊,那同样道理,姓名是不是也不能得到系主任呀,那这个没有函数关系啊,那再往下走,下边呢,是这个细描。那你说这个系名它要作为X的话,它能不能得到学号?很显然不能,一个系里边好多学号对吧?这肯定不行,那一个系好多姓名也不行,那一个系名能得到一个系主任呢?这个其实可以啊,但是你不要抬杠啊,有的人说,哎,我这一个系里俩主任对吧?那那那就没办法了啊,咱们这不抬杠,就假如说一个系就一个系主任啊,那我一个系啊,一个系,然后呢,得到一个系主任,这应该是没问题的,对吧?啊,这是有函数依赖关系的啊,那OK,那接下来看最后一个啊,最后一个是系主任作为X,那系主任是不是也是人呀,人就有可能重名,由重名你是不是就不能作为X啊,所以说这块大家应该是能搞清楚的啊,那所以咱们所有的函数依赖关系啊,全部找到了,就是这么多啊,那你发现这里边到底有没有传递函数依赖感?
11:19
很显然是有的,这块是不是学号到系名,系名到系数,这是不是典型的传递函数依赖啊,对不对,那这种依赖关系咱们是不能要的,那不能要怎么消除呢。怎么消除啊,对,还是拆,你这是不是传递了,那传递我直接一切两半,是不是就不传递了,那就把这个传递关系给它斩断,相当于是啊,那所以说这张最终啊,这张表咱们拆成了啊以下这个效果。一下这个效果啊,你看这张表啊,这张表里边呢,有学号,有呃姓名有姓名啊,那这样一来大家能发现啊,咱们这相当于什么呀啊相当于是呃,已经没有了这个传递依赖了啊,因为那个后边系主任是不是没了呀啊没有传递了,只是只剩下完全还是依赖了,那从理这边呢,我也只剩下了完全还是依赖啊,这个呢,其实就是啊,咱们这个第三范式的这个思想,就是不能存在传递函数依赖啊,当然这个表啊,你这么拆完之后呢,其实一般情况下,咱们这个还是需要再进行进一步的处理的啊,再进一步怎么处理的。
12:19
啊,再处理啊,其实应该给这张表加一个什么呀。加上一个主键。对不对,是不是加一个主键呀,那然后这这个地方咱们写系名嘛,不写系名咱写啥呀,写那个外键对吧,相当写那个系这张表的外键是不是这么去关联呀,啊其实正正常应该这么去处理一下啊啊咱们这儿呢,就不再多说了啊那第三范式的咱们就说完了啊哎,你会发现啊,经过咱们这个三范之后啊啊确实比较神奇啊,数据的冗余确实消失了,然后表呢,是不是也被拆的比较散了呀,由原来的一张表拆成了这样的三张表啊三张表这这就是所谓的这个呃三范式啊,就是这样啊啊那这部分内容呢,因为跟咱们的维度建模的关系,说实话不是特别大,那所谓这块呢,我们就以了解为主就行了啊了解啊好,那我把这个视频录一下。
我来说两句