数据库|第一范式、第二范式、第三范式、BC范式、第四范式简单理解

在设计数据库的时候,虽说将我们要的数据正确完整导入数据库是很关键的,但是对于数据库的设计者来说,如何将大量数据合理有效正确地导入数据库中也是极其关键的,好的数据结构不仅有助于对数据库进行相应的存取操作,还可以极大地简化应用程序中的其他内容(查询、窗体、报表、代码等)。所以数据库设计者在设计数据的过程中,按照“数据库规范化”对表进行设计,其目的就是减少数据库中的数据冗余,以增加数据的一致性。

函数依赖

在题几种范式之前,我们要先了解下函数依赖
定义:
在这里插入图片描述
说明:函数依赖是数据依赖的一种,它反映了同一关系属性之间的约束关系。函数依赖理论是关系范式的理论基础。
几种函数依赖

  • 平凡函数依赖和非平凡函数依赖
  • 简单的说就是A属性依赖于B(B为码),若B包含A中,则为平凡函数依赖,反之为非平凡函数依赖
    在这里插入图片描述
  • 完全函数依赖和部分函数依赖
    在这里插入图片描述
    例如关系(sno,cno,grade,sdept)//学号 课程号 分数 系
    grade完全依赖于主码(sno,cno)//必须要有学生的学号,所选修的课程号,才能知道该门课程的成绩
    sdept部分依赖于主码(sno,cno)//只要知道学生的学号,就能知道学生所在的系,不需要知道课程号
  • 传递函数依赖 在这里插入图片描述
    理解:即一个属性B依赖于A(A->B),属性C依赖于B(B->C),则C传递依赖于A

  • 候选码:若关系中的某一属性组的值能唯一地标识一个元组,而其子集不能,则称该属性组为候选码。
  • 主码:若一个关系中有多个候选码,则选定其中一个为主码。
  • 外码:同时在两个表中,用来连接两个表的某个属性。

主属性、非主属性、全码

包含在任意候选码中的属性叫做主属性,不包含在任意候选码中的属性叫非主属性(注意:关系的候选码可能有多个,能确定多个主属性)
全码:整个属性组都是码,成为全码。

第一范式

如果一个关系模式所有属性都是不可分的数据项,称这个关系满足第一范式
说明:第一范式是关系模式最起码的要求,如果不满足第一范式,不能称为关系。
在这里插入图片描述
对于上面这个表,商品属性可以分为商品名称和商品数量,即存在表中有表的现象,不满足第一范式

第二范式

定义:若某关系R属于第一范式,且每一个非主属性完全函数依赖于任何一个候选码,则关系R属于第二范式。
第二范式要求,表中所有的实例必须可以被唯一地区分
不满足第二范式造成数据冗余
在选课关系表(学号,课程号,成绩,学分),关键字为组合关键字(学号,课程号),但由于非主属性学分仅依赖于课程号,对关键字(学号,课程号)只是部分依赖,而不是完全依赖,因此此种方式会导致数据冗余以及更新异常等问题,解决办法是将其分为两个关系模式:学生表(学号,课程号,分数)和课程表(课程号,学分),新关系通过学生表中的外关键字课程号联系,在需要时进行连接。

一个不满足第二范式的例子

关系模式S-L-C(Sno, Sdept, Sloc, Cno, Grade),其中Sno, Sdept, Sloc, Cno, Grade依次表示学生的学号、所在的系、住处、课程号、班级,并且每个系的学生住在同一个地方。可知S-L-C的码为(Sno, Cno)

在这里插入图片描述
函数依赖
在这里插入图片描述
根据定义“每一个非主属性完全函数依赖于任何一个候选码”判断,这里面Sdept和Sloc都部分依赖(虚线表示)于主码(sno,cno),即存在非主属性部分函数依赖于码,不符合第二范式。

第三范式

定义:如果关系模型R是第二范式,且每个非主属性都不传递依赖于R的候选键,则称R是第三范式的模式。
说明:要每个非主属性既不部分依赖于码,也不传递依赖与码,如果R符合第三范式则R符合第二范式。

不符合的例子
关系S-L(sno,sdept,sloc)中
函数依赖
在这里插入图片描述
我们可以得到
在这里插入图片描述
即关系存在非主属性对码的传递函数依赖,所以不符合第三范式

BC范式(BCNF)

定义: 关系模式R<U,F>中,若每一个决定因素都包含码,则R<U,F>属于BCFN。
说明:BC范式是构建在第三范式的基础上,如果关系模型R满足第三范式,且每个属性都不传递依赖于R的候选键,那么称R满足BC范式
若R符合BCNF
有:
所有非主属性对每一个码都是完全函数依赖;
所有主属性对每一个不包含它的码也是完全函数依赖;
没有任何属性完全函数依赖于非码的任何一组属性。//所依赖的都是码或者说每个决定因素都含码
在这里插入图片描述
不符合BC范式的例子
关系SJP(S,J,P)S表示学生,T表示教室,J表示教室
函数依赖
在这里插入图片描述

在这里插入图片描述
关系SJP符合第三范式:没有任何非主属性部分函数依赖或传递函数依赖于码
关系SJP不符合BC范式:(S,J)依赖于T ,T是决定因素,但是T不含码

第四范式

设R是一个关系模型,D是R上的多值依赖集合。如果D中存在凡多值依赖X->Y时,X必是R的超键,那么称R是第四范式的模式。

例如,职工表(职工编号,职工孩子姓名,职工选修课程),在这个表中,同一个职工可能会有多个职工孩子姓名,同样,同一个职工也可能会有多个职工选修课程,即这里存在着多值事实,不符合第四范式。如果要符合第四范式,只需要将上表分为两个表,使它们只有一个多值事实,例如职工表一(职工编号,职工孩子姓名),职工表二(职工编号,职工选修课程),两个表都只有一个多值事实,所以符合第四范式。

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐