三大范式

作者: ArvonQ | 来源:发表于2016-06-13 21:42 被阅读233次

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

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)和部分依赖属性;

参考:

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

数据库—范式

相关文章

  • MySQL三大范式和反范式

    MySQL三大范式和反范式 第一范式 第二范式 第三范式 反范式

  • 范式

    数据库(第一范式,第二范式,第三范式)

  • Mysql相关面试题

    1.何为范式? 第一范式(1NF):第一范式就是无重复属性的列。 第二范式(2NF):第二范式是在第一范式的基础上...

  • MySQL范式

    范式介绍 目前关系型数据库有6种范式:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、巴德斯科范式(B...

  • 数据库范式

    关系数据库六种范式: 第一范式(1NF)、 第二范式(2NF)、 第三范式(3NF)、 巴斯-科德范式(BCNF)...

  • 读《学习之道》

    “输入—练习—内化—输出” “理解范式—应用范式—识别范式—输出范式” 不管你想学什么,你都可以在书里找到方法。 ...

  • 数据库范式原则,第一,第二

    目前关系数据库有六种范式:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、巴斯-科德范式(BCNF)、...

  • 数据库的常见知识

    数据库三范式 第一范式:表中的每个字段不可再分第二范式:满足第一范式并且表中的非主键字段依赖主键字段第三范式:满足...

  • java_sql数据库的设计

    数据库设计三范式(重点) 1.什么是设计范式 2.设计范式是哪些 3.第三范式 是建立在第二范式基础上 所有非主键...

  • java面试题杂谈

    #数据库三大范式: 第一范式:属性不可再分; 第二范式:消除冗余; 第三范式:消除函数传递依赖。 #设计模式 1....

网友评论

本文标题:三大范式

本文链接:https://www.haomeiwen.com/subject/xcnydttx.html