数据库三大范式就是数据库的设计的3个规范,通过这3个规范,设计出的表基本上比较正确了,同时你也可以用这3个规范来检查一下某个表设计得是否规范!!! 如果你没听懂这段话是什么意思,不要慌,往下看,你肯定能看懂
首先来一个作为示例的表
下面的所有讲解都是基于这张表的
算了,先把3个范式的概念说一下吧,看不懂没关系
第一范式:每一列都是不可分割的原子数据项 (啥意思?就是每一列是独立的,不准有Excel表格中的那种合并单元格出现,这样解释是不是通俗易懂?!!)
修改为下面这样就符合第一范式了
但这个表可是光修改成这样还是不够的,这个表还有很多地方设计的不够规范,上面只是改了一处地方,接下来还有修改很多地方,才能符合规范
,究竟还有哪些问题呢???
表存在的问题
首先第一个问题---------->冗余问题,表中存在大量的冗余数据,不简洁,浪费存储资源
第二个问题,添加数据困难,比如要添加一个新的系,则很难添加进去,不信你看看!!
我要添加一个计算机系,和老师,难道你就向上面那样添加吗?肯定不行啊,这样添加,也太不符合规范了吧!!!竟然还有两个数据凸出出来了,这像什么话????
第三个问题,数据删除存在问题!!假如我把张无忌的信息删除掉,那经济系也跟着删除掉了,是不是,这怎么行呢?简直乱来啊,不信你看看下图
接下来介绍几个概念
咋一看上面的几个概念,这都讲的啥啊,这么绕,怎么看得懂啊,什么什么依赖啊,还那么多箭头,指来指去的
接下来,跟大家通俗易懂的讲解一下上面的那几个概念
函数依赖比如A依赖B,这里你可以这样来理解,孩子依赖于父母
A就是孩子,B就是父母,这里的孩子指的是五六岁的小孩子,还不懂事的孩子!!!是不是这个道理?哈哈,因为孩子依赖于父母,所以通过父母,我们能够确定孩子的性格是怎样的,是这样的吧?父母可是孩子最亲的人啊,父母不确定,那还有谁确定呢?相反,通过孩子能知道父母的性格是怎样的吗?那肯定不行啊,孩子才几岁啊,哪懂这些!!!
同时还要注意的是,这里的孩子不止一个,可能有多个孩子(多个字段),这里的父母当然也不是一个人,肯定是两个人(这里假设是多个人,即多个字段,其实这里的父母就是后面要介绍的码)!
完全函数依赖,某一个孩子(某个字段)他是完全依赖父母两个人的,这个孩子比较难捉摸一点,单凭父母中的任意一个,还无法全面了解,必须父母两个人才能完全了解
部分函数依赖,某一个孩子(某个字段)他比较容易捉摸,父母中只要一个人就可以确定这个孩子的性格
传递函数依赖 比较容易理解,就是A依赖B,B又依赖C,所以A就是传递依赖C,不是直接依赖C
码 这里的父母就是码!!!是不是so easy
主属性 就是父亲或者母亲,这两者就叫做主属性
非主属性 孩子就叫做非主属性
可以看出来,这张表中父母就是学号和课程名称,通过学号和课程名称就可以唯一确定其他的属性值,所以学号和课程这两个属性就是码
============================
好了,概念终于介绍完了,是不是很简单,接下来就要根据第二范式来进行修改了
第二范式概念:在1NF的基础上,非码属性必须完全依赖主码属性,就是所有的孩纸必须完全依赖于父母,不允许有容易捉摸的孩子出现,要将孩子全部变为难以捉摸的,因为难以捉摸的孩子比较成熟稳重,哈哈,乱猜的,父母肯定是希望自己的孩子成熟稳重
怎么修改呢,就将难以捉摸的孩子和父母放在一块,将容易捉摸的孩子与父母中其中一个放在一块
然后将重复项删除掉
但是但是,问题还没有解决完呢?可千万别高兴的太早
还有两个问题亟待解决,如下图
上图的两个问题,自己分析一下,看看是不是?
所以为了解决这两个问题,第三范式隆重登场
第三范式概念:在2NF基础上,非主属性之间不能有依赖关系,就是非主属性不能依赖于另外一个非主属性(说简单点,就是在2NF基础上消除传递依赖)
怎么修改呢? 很简单,把依赖的两个非主属性,提取出来就行了
这样上面的两个问题就成功解决了!自己分析一下,很简单的
=================================================
好了,这就是数据库三大范式,看懂了吗?
小结一下:
第一范式:看外表
第二范式:分居,难以捉摸的和父母睡,容易捉摸的和其中一个睡
第三范式:孩子之间不能相互依赖,一旦孩子之间出现依赖,就立马将出现相互依赖的孩子赶出家门
再次总结
第一范式:外表
第二范式:分居
第三范式:赶出家门
如果觉得《通俗易懂讲解数据库三大范式》对你有帮助,请点赞、收藏,并留下你的观点哦!