三大范式

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

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

参考:

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

数据库—范式

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 概述 一般地,在进行数据库设计时,应遵循三大原则,也就是我们通常说的三大范式,即第一范式要求确保表中每列的原子性,...
    stutterr阅读 25,197评论 6 20
  • 范式:对表结构的要求! 第一范式(1NF,normal format):字段不能再分。这是字段的原子性。例如:字段...
    康明阅读 469评论 0 0
  • 为了建立冗余较小、结构合理的数据库,设计数据库时必须遵循一定的规则。在关系型数据库中这种规则就称为范式。范式是符合...
    业余程序员阅读 686评论 0 3
  • 六朝古都——南京。 似乎没有太多计划性便出行,随遇而安,似当地人般地行走,感知这座颇有历史韵味的古城和它的现代气息...
    馨晴的能量小站阅读 202评论 0 1
  • 仓央嘉措,最美情话。岁月,是佛牵手的一朵情花。简静珍贵 被选中的人生,幸运或挣扎。我来到人世间,被世人所误。 人...
    Rudy宁阅读 510评论 0 2