数据库相关程序员技术干货

三大范式

2016-06-13  本文已影响233人  ArvonQ

一直对数据库原理的各种概念不是很清楚,最近正好做题看到三大范式这块,看了看大家的总结,于是自己也出一版自己对三大范式的理解:

1.先说说为什么出现三大范式:

一句话—为了避免数据冗余

2.第一范式:

存在非主属性对码的部分依赖关系 R(A,B,C) AB是码 C是非主属性 B-->C,B决定C,C部分依赖于B;

简述就是:主属性(存在主键不为空且不重复,不可再分(存在非主属性对主属性的部分依赖)

例如:(借用人家的例子)

StudyNo     |   Name    |   Sex     |   Contact

20040101      john         Male       email:kkkk@ee.net,phone:222456

20040201      mary        Famale    email:kkk@fff.net phone:123455

以上的表就不符合,第一范式:主键重复(实际中数据库不允许重复的),而且Contact字段可以再分

所以变更为正确的是

StudyNo   |   Name   |   Sex   |      Email         |      Phone

20040101      john      Male      kkkk@ee.net        222456

20040201     mary      Famale   kkk@fff.net         123455

3.第二范式

存在非主属性对码的传递性依赖 R(A,B,C) A是码 A -->B ,B-->C

简述:如果关系范式是第一范式,每个非主属性都没有对主键的部分依赖,那么此关系范式是第二范式

所以第二范式的主要任务就是

满足第一范式的前提下,消除部分函数依赖。

StudyNo | Name   |   Sex   |   Email     |      Phone    |   ClassNo  | ClassAddress

01           john        Male     kkkk@ee.net 222456      200401            A楼2

01           mary       Famale  kkk@fff.net  123455       200402            A楼3

这个表完全满足于第一范式,

主键由StudyNo和ClassNo组成,这样才能定位到指定行

但是,ClassAddress部分依赖于关键字(ClassNo-〉ClassAddress),

所以要变为两个表

表一

StudyNo   |   Name   |   Sex   |      Email         |     Phone |   ClassNo

01            john         Male         kkkk@ee.net       222456      200401

01           mary         Famale     kkk@fff.net         123455      200402

表二

ClassNo  | ClassAddress

200401      A楼2

200402      A楼3

第三范式

简述:没有非主属性对主键的传递依赖和部分依赖属性。

StudyNo   |   Name   |   Sex   |      Email         |      bounsLevel   |      bouns

20040101      john       Male       kkkk@ee.net           优秀                  $1000

20040201     mary       Famale    kkk@fff.net             良                    $600

这个完全满足了第二范式,但是bounsLevel和bouns存在传递依赖

更改为:

StudyNo   |   Name   |   Sex   |      Email         |      bouunsNo

20040101      john        Male        kkkk@ee.net        1

20040201     mary        Famale    kkk@fff.net          2

bounsNo   |   bounsLevel   |   bouns

1                   优秀                $1000

2                    良                   $600

再次总结:

1.第一范式:有主键,主键不为空、不重复,列不可再分

2.第二范式:在第一范式的基础上,非主键的属性对主键没有部分依赖;

3.第三范式:没有非主属性对主键的传递依赖(例如C依赖于B,B又依赖于主键A)和部分依赖属性;

参考:

第一范式,第二范式,第三范式

数据库—范式

上一篇 下一篇

猜你喜欢

热点阅读