00:00
好,那下面的话,我们来看一下这个三范式啊,这个在呃,也是JAVA1后台设计表结构的时候呢,遵循的这个非常主流的啊,三范式就是第一范式,第二范式,第三范式啊,我们都要遵循,那么来先看一下第一范式是表示什么含义。啊,第一范式呢,叫e enf啊,也也可以这样简写啊,核心的原则叫属性不可切割。叫属性不不可切割,那它是怎么理解的呢?来看一下,看一下这张表。你觉得这张表设计的这个合不合理哈?首先呢,这里面有ID对吧?啊一个一条信息,然后呢,有商品有商家ID,有用户ID。那这里面这个商品这块呢,它定义的是五台电脑。啊,我们才在讨,很明显设计不符合,第一方是商品,这中数据呢,不是原子性啊,不是原子数据项是可以进行分割的,叫属性不可切割,你必须得遵循属性不可切割,那你看这个001肯定不可以再切了吧,没法再分了,什么什么旗舰店啊,什么什么001,这都没问题,但是它。
01:11
它就完全可以切出来一个叫数量对吧。数量,比如说舞台,那另一个呢,叫这个,这个是电脑,那电脑属于商品。你说你这个商品这一列,它是可以拆分的。那如果你这样去设计的话,说五台电脑啊,往里面去放,那这就叫属性不可切割,你违反了这条要求。啊,那这也就是不合理的。你说设计表的时候不能这么设计?那你需要把它设计成什么样呢?哎,设计成这样,增加了一个店,这个商品和数量,这样去区分,这样操作就好操作一下啊,实际上呢,一范式呢,是所有关于数据库的最基本要求,人只要设计数据库,没有是设计成这种的。必须得满足这一条。你在关心数据库系统管理的时候啊,例如什么SQL server啊,Oracle my circleql中创建数据表的时候,如果数据表的设计不符合这个最低啊最基本的要求,那么操作一定不能成功。
02:10
那你想想吧,如果你设计成表是这样的,你怎么维护啊,我我说我买一台电脑。然后告诉你这里面是五台电脑一个属性是吧?啊五台电脑一个属性,那那你要改改的话啊,先先改一一台啊一台啊电脑,那我想如果改成一台一台手机,那你这个又要改啊,这太麻烦了啊。行,也就是说这个这个是关系数据库啊,关系数库已经存在的数据表一定符合一范式,只要从MYSQ过来的数据肯定满足这个啊,这是第一范式。太简单,属性不可切割。好,那看一下第二方式。第二范式呢?核心原则叫不能存在部分函数依赖。那稍微回顾一下部分函数依赖啊,A和B。A和B推出C,但是在这过程当中呢,A能推出C,或者B能推出C,对吧?是这样的过程吧,那就说明这里面存在的部分函数,你的。
03:09
那这个呢,就不符合要求,你说你存在部分部分这个函数一代,那么它就不满足第二派。大家看还是这个,之前我们拿这个例子啊,这个学号姓名姓名啊,这个课名分数。那存在部分函数依赖。比如这张表当中学号和课名。呃,分数呢,确定完全依赖于学号和课名,但是呢,姓名就还是这个姓名,姓名呢,并不完全依赖于学号和姓名。啊,学课程。那如果说你设计表的时候是这样去设计的。这就是不符合部分函数一站你是在加后台,你不能这样去设计表。啊,这样是不行的,大家感觉哎这挺爽,这没什么问题,好像我这个往那一列,那我在查询查询数据的时候,那很方便啊。
04:00
嗯,那其实这里面是不行的啊,那你要怎么办呢,看。学号和课名能够唯一推出分数,那你这里面就独立成一张表。哎,学号课名分数对吧,我这两个能够唯一推出它,那你这个姓名你不能往这放了。那你就变成了,嗯,学号姓名。啊,其实这个后面再说啊,这个还还得再拆,你说变成学号就相当于把一张大表,这是一张大表对吧?啊,这一张大表拆分出来小表啊,这不就小表吗。啊,你看这样。那这样这里面就不不存在这个这个部分函数依赖了,因为这里面学号和姓名,学号和课程唯一能推出分数,分数也完全取决它。对吧,那这呢学号学号我们直接呢,可以推出姓名,也就姓名呢,唯一依赖于学号。就是大表拆成小表。OK。以下符合二分式啊,去掉部分函数依赖,好,那这是第二范式,叫不存在部分函数依赖,那看看第三范式。
05:10
好,看一下第三范式的原则呢,叫不能存在传递函数一了。啊,下面这张表上呢,比如说哎,学号能够推出姓名,学号能够推出姓名,然后姓名呢,能够推出系主任,他能够推出他。但是系主任呢,往回推,推不出来对应的学号,那这种呢叫存在着传递函数集的,那也不符合三分之要求,那怎么办?继续再分。把它进行一个拆分。那这个是学号啊,姓名啊,这个是姓名,然后把姓名和系主任单独拆开,把它拿出来。啊,拿拿出来对吧,拿出来拆分成这种小表啊,尽可能细分,你说你看新名能够唯一推出来新主任。对吧,啊,新主任的也能知道我是哪一个系的。啊,这样的一个关系哈,所以说你你会感觉这个三式啊,它的原则就是不停的拆拆拆拆拆拆成各种这个对应的小表,那就能满足对应的要求了。
06:09
啊,你说拆的越细越小,甚至这一个表里面就两就两列,对吧,那是最完美的了。啊,这两类吧,跟姓名姓名对吧,学号姓名啊,这个姓名其实这这个都存在问题。比如说这个学号能推出姓名,但是姓名也也能,呃,推出是哪一个系的,但你往回推其实还是不行。那就是把它尽可能的拆分成最系,那么稍微回顾一下这个三式的要求哈,第一范式呢,叫属性不可切割。啊,属性不可切割也是不能存在这种情况。那第二范式呢,叫不能存在部分函数一代。那部分函数依赖的特点呢,就是AA和B,它俩都能够有一,只要有一个能够推出这个姓名。那就行了啊,那这种呢,就存在这种情况就不行哈,这种情况不行,那怎么办呢?哎,把它拆出来。
07:01
对吧,哎,学号姓名这么去发,因为这个课名啊,跟我就没关系,我就猜出来,那再往下呢,是这个第三范式呢,叫不能存在这个传递函数一了。啊,推推。那我就把他俩的给它拆开,拆分成这种啊,进行一个外键关联。啊,这就是这个三四,呃,一般是你们在日后的这个面试过程当中啊,啊有一些这个啊,没有大数据的这个企业。啊是Java程序员他们呢,愿意去问这个34000,因为他们Java后台呢,设计表结构的时候呢,都要符合这个34000。啊,所以说他觉得他觉得这大数据这边是不是也应该遵遵循这个三万四啊,其实我们不遵循啊。
我来说两句