关于——三范式——笔记

首先一范式是指每个属性不可再分,要复合原子性。

比如:

比如这个表格,它的课程&成绩属性就可以再分为课程名和分数,这就不符合1NF(一范式)的要求。

如果是这样就符合1NF的要求了。数据库里的每张表都符合1NF。

我们以:

为例说说1NF的去缺点:

1、数据冗余:它的id,姓名,专业出现多次,造成了很大的数据冗余。

2、插入异常:比如我们要插入一个新的专业但是它又还没有开课,那么我们就无法插入,没开课就没有学生,即id(主键)没有就无法插入一条数据。

3、删除异常:如果小花毕业了,就要删除小花的数据,这样就会导致物联网这个专业也一同删除了,这不是我们想要的。

4、修改繁琐:假设小米要转专业,那么我们就得修改三条数据,太麻烦了也不是我们想要的。

 

然后是二范式,要了解二范式首先我们要理解以下几个概念:

1、码:它指的是能根据这些属性能唯一确定其他所有属性的值,比如我们讲一范式确定的那张表,它的码就是id和课程名这个属性组,因为它们确定了其他的所有属性也就确定了。

2、非主属性:除去码里的属性外表里的所有属性都叫非主属性。

3、数据依赖:它是指某个属性依赖于另外一个属性,依旧以我们上面的表为例,我们可以说姓名依赖于id,写做:姓名——id  完全依赖:码的其中一个属性无法得到另一个属性的值,就比如单单靠id或者课程名我们是无法得到分数的。所以我们可以说“分数完全依赖于(id、课程名)属性组”写作:(id、课程名)——成绩

好,现在来讲我们的2NF,它的概念:它是一个一范式的表,且每一个非主属性完全依赖于任何一个候选码。

就是说,我们的每个非主属性都都完全依赖于码。我们把上面的表格分解一下(有很多种分解方式,这里只列举其中一种)

         

这样的话我们的每一个非主属性都完全依赖于码了。比如都一个表,id是码,姓名和专业都可由id唯一确定。比如第二个表,分数可由id和课程名这个属性组也就是码唯一确定。为什么我们的一开始的表不符合第二范式呢?因为专业这个属性不能由id和课程名这个码唯一确定,所以它不是2NF。

2NF解决了第一范式的两个缺点,数据冗余和修改繁琐。

还剩下删除异常和插入异常,仔细思考一下你会发现这两个问题并没有解决。

最后是第三范式:首先我们了解一下传递依赖这个东西,传递+依赖嘛,就比如说B依赖于A,C依赖于B,那么我们就可以说C依赖于A。这就是传递依赖。

3NF的概念:符合第二范式且没有传递依赖。

我们把上面的表再改一下:

  

为什么开始2NF的表不是第三范式捏,你观察看,教授是依赖于专业的,专业是依赖于id的,这样就存在了传递依赖。

修改以后就没有2NF的缺点了。不管是插入无学生的专业还是删除学生都可以实现,那么它有什么缺点呢?

那就是对技术要求更加的高了,比如我们要查找id为20191101的高数成绩是不是还要使用外连接的方法?即缺点是查询困难。

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值