数据库中的范式
【前言】
最近做数据库中的题,总是遇到关于范式的问题,隐隐约约知道点,还是又不知道,知道是怎么回事,却无法用正确的属于说出来,毕竟正确的术语说出来显得高大上,我们是学数据库的这方面的人一样,就像说相声有自己的专业行话。于是花费了很长时间对范式做了了解,还要感谢金颖小伙伴对我的耐心指点,还有CoCo吴的指导,做出了以下总结,欢迎小伙伴们一起来探讨。
数据库范式
遵循规则:不存在冗余数据
第一范式
我们以例题为例:
(二维表中的属性可以被拆分,不满足第一范式。)
将最属性变为最基本的数据项(属性不可以在拆分)
第二范式
2NF
满足1NF,非主属性完全函数依赖于候选键(自定义的候选键,这个候选键为主键,这里要明确所有的键都是一个集合)(左部不可约)
下面例题说话:
假如我需要知道我某一门课程的成绩,如果只有学号是可以推出表中所有的属性以及属性值的,但是不能找出我想要的是哪门成绩,如果课程号和学号为关键字,则可以推出我想确切的那门成绩。
可以想象一下我们查考试成绩的时候,输入学号就可以查出自己所有的成绩单,但是你知道某一课程确切的成绩,是不是下意识的看一下课程名或者课程号,才能查出确切某一科目的成绩。
1.首先你必须明白什么是完全函数依赖和局部函数依赖
2.了解关键码在不同场合的意思,以及各种键之间的关系(如果不了解,看我的博客呦,链接如下:)
http://blog.****.net/fjx****/article/details/76549751
3.必须明确各种键都是一个集合,这个集合可以包括一个集,也可以包括多个集。
4.了解什么是非主属性和什么是非主属性的概念。
主属性——包含在任一候选关键字中的属性称主属性。(主属性:构成候选键的属性)
非主属性——不包含在主码中的属性称为非主属性。(主码就是主键的意思也可以称作主关键字)
非主属性是相对与主属性来定义的。
例如:在关系——学生(学号,姓名,年龄,性别,班级)中,主码是“学号”,那么其他的“姓名”、“年龄”、“性别”、“班级”就都可以称为非主属性
下面我以小伙伴李金颖博客的例子做一下解释:
解析:学号和课程名为主键,(候选键的一种,也可以称作主关键字)
学号和课程名为一个集合X,该结合X可以决定整个关系。
该集合中的一个真子集学号X1,也可以决定该关系中的非主属性,即集合的一部分真子集也可以决定 非主属性,为局部依赖)。
第三范式:
3NF:
满足2NF,消除非主属性对候选键的传递依赖
我的理解:
1.只要在一个关系表中,满足第二范式基础上,且不存在传递依赖就可以。
2.例如在一个关系表中A→BC,B→C,若满足第三范式,就需要拆表。
BCNF:
(当关系满足如果R中非平凡的函数依赖的左边都是超键,则此关系R属于BCNF)
性质:任何一个二元关系都满足BCNF
证明:如果函数依赖集中存在A-->B,则我们可以说A-->AB,(A可以决定自己本身)因此A一定是超键;
4NF
满足BCNF,消除非平凡且非FD的多值依赖(MVD)
非形式说:只要两个独立的1:N联系出现在一个关系中,那么就可能出现多值依赖。
总结一下:
关于范式的总结就先到这吧,关于BCNF和第四范式如果看不懂就先当了解吧,这篇博客主要是自己的一些想法和小伙伴的例子的总结,小伙伴的总结很让我们受益啊。这个过程成不是我们对范式不理解,而是当提到什么是非主属性,什么是完全依赖,什么是局部依赖啊,传递依赖啊,以及平凡依赖啊,什么是关键码的时候,以及各种键之间的关系我们必须了解清楚。基础的了解了,大问题就不是什么没有什么毛病了。
推荐博客以及视频链接:
范式的总结:
http://v.youku.com/v_show/id_XMTA2MjAxMDg=.html
http://blog.****.net/sevengirl2017/article/details/77678233
http://v.youku.com/v_show/id_XMTA2MjAxMDg=.html
关键码(超键、候选键、主键、外键)的总结:
http://v.youku.com/v_show/id_XMTA2MjAxMDg=.html