数据库中的范式

【前言】

    最近做数据库中的题,总是遇到关于范式的问题,隐隐约约知道点,还是又不知道,知道是怎么回事,却无法用正确的属于说出来,毕竟正确的术语说出来显得高大上,我们是学数据库的这方面的人一样,就像说相声有自己的专业行话。于是花费了很长时间对范式做了了解,还要感谢金颖小伙伴对我的耐心指点,还有CoCo吴的指导,做出了以下总结,欢迎小伙伴们一起来探讨。

 

数据库范式

  遵循规则:不存在冗余数据


第一范式

 我们以例题为例:

 (二维表中的属性可以被拆分,不满足第一范式。)

 

                    数据库中的范式

 

 

将最属性变为最基本的数据项(属性不可以在拆分)

 

                 数据库中的范式

 

第二范式

2NF
 
满足1NF,非主属性完全函数依赖于候选键(自定义的候选键,这个候选键为主键,这里要明确所有的键都是一个集合)(左部不可约)
  下面例题说话:

 

                                       数据库中的范式

 

 

假如我需要知道我某一门课程的成绩,如果只有学号是可以推出表中所有的属性以及属性值的,但是不能找出我想要的是哪门成绩,如果课程号和学号为关键字,则可以推出我想确切的那门成绩。

可以想象一下我们查考试成绩的时候,输入学号就可以查出自己所有的成绩单,但是你知道某一课程确切的成绩,是不是下意识的看一下课程名或者课程号,才能查出确切某一科目的成绩。

 

1.首先你必须明白什么是完全函数依赖和局部函数依赖

2.了解关键码在不同场合的意思,以及各种键之间的关系(如果不了解,看我的博客呦,链接如下:)

http://blog.csdn.net/fjxcsdn/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.csdn.net/sevengirl2017/article/details/77678233

http://v.youku.com/v_show/id_XMTA2MjAxMDg=.html

关键码(超键、候选键、主键、外键)的总结:

http://v.youku.com/v_show/id_XMTA2MjAxMDg=.html