如何判断R为第几范式?

已知一个关系模式的属性之间的语义,也就是相互依赖的关系,如何判断该模式满足第几范式?

1、首先要通过语义把属性之间的函数依赖关系列出来,

2、然后确定哪些属性组合可以候选码,从而找出非主属性和主属性。

3、然后判断是否存在非主属性与码之间的部分函数依赖关系,如果存在,则不满足2NF,如不存在部分函数依赖,则属于2NF,

4、继续进行下一步判断;判断非主属性与码之间存在传递依赖关系,不存在,则为3NF;

5、决定因素是否包含码,满足条件则为BCNF

简而言之

数据库 | 关系数据库 | 函数依赖 | 码_主属性

数据库 | 关系数据库 | 函数依赖 | 码_多值依赖_02


规范化

规范化理论正是用来改造关系模式,通过分解关系模式来消除其中不合适的数据依赖,以解决插入异常、删除异常、更新异常和数据冗余问题。


关系模型

关系模式由五部分组成,即它是一个五元组: R(U, D, DOM, F)

R:关系名

U:组成该关系的属性名集合

D:属性组U中属性所来自的域

DOM:属性向域的映象集合

F:属性间数据的依赖关系集合

简化为一个三元组:R(U, F)


数据依赖

什么是函数依赖

数据库 | 关系数据库 | 函数依赖 | 码_主属性_03

定义

数据库 | 关系数据库 | 函数依赖 | 码_多值依赖_04

平凡函数依赖与非平凡函数依赖

数据库 | 关系数据库 | 函数依赖 | 码_多值依赖_05

数据库 | 关系数据库 | 函数依赖 | 码_数据库_06

完全函数依赖与部分函数依赖

数据库 | 关系数据库 | 函数依赖 | 码_数据库_07

数据库 | 关系数据库 | 函数依赖 | 码_主属性_08

传递函数依赖

数据库 | 关系数据库 | 函数依赖 | 码_非主属性_09

数据库 | 关系数据库 | 函数依赖 | 码_数据库_10

确定函数依赖的方法

数据库 | 关系数据库 | 函数依赖 | 码_非主属性_11


数据库 | 关系数据库 | 函数依赖 | 码_多值依赖_12

数据库 | 关系数据库 | 函数依赖 | 码_多值依赖_13

外部码

数据库 | 关系数据库 | 函数依赖 | 码_多值依赖_14


范式

一个低一级范式的关系模式,通过模式分解可以转换为若干个高一级范式的关系模式的集合,这种过程就叫规范化

1NF

如果一个关系模式R的所有属性都是不可分的基本数据项,则R∈1NF

第一范式是对关系模式的最起码的要求。不满足第一范式的数据库模式不能称为关系数据库

但是满足第一范式的关系模式并不一定是一个好的关系模式

数据库 | 关系数据库 | 函数依赖 | 码_主属性_15

(F为完全依赖,P为部分依赖)

数据库 | 关系数据库 | 函数依赖 | 码_database_16

(Sno,Cno)能完全决定S-L-C

数据库 | 关系数据库 | 函数依赖 | 码_多值依赖_17

2NF

若R∈1NF,且每一个非主属性完全函数依赖于码,则R∈2NF。

数据库 | 关系数据库 | 函数依赖 | 码_非主属性_18

数据库 | 关系数据库 | 函数依赖 | 码_database_19

采用投影分解法将一个1NF的关系分解为多个2NF的关系,可以在一定程度上减轻原1NF关系中存在的插入异常、删除异常、数据冗余度大、修改复杂等问题。

将一个1NF关系分解为多个2NF的关系,并不能完全消除关系模式中的各种异常情况和数据冗余。

3NF

数据库 | 关系数据库 | 函数依赖 | 码_非主属性_20

R∈3NF,则每一个非主属性既不部分依赖于码也不传递依赖于码。  

数据库 | 关系数据库 | 函数依赖 | 码_多值依赖_21

数据库 | 关系数据库 | 函数依赖 | 码_非主属性_22

数据库 | 关系数据库 | 函数依赖 | 码_database_23

BCNF

数据库 | 关系数据库 | 函数依赖 | 码_非主属性_24

数据库 | 关系数据库 | 函数依赖 | 码_主属性_25

数据库 | 关系数据库 | 函数依赖 | 码_非主属性_26

数据库 | 关系数据库 | 函数依赖 | 码_database_27

数据库 | 关系数据库 | 函数依赖 | 码_database_28

关系模式STJ中有学生S,教师T和课程J这样的三个属性,约定的语义是每一个教师只教一门课,每门课有若干个教师,教师与课程之间是一对多的联系,也就是说教师函数决定课程。某个学生选定某门课,就对应一个固定的教师。

我们先来看一下这个关系模式的候选码都有哪些?大家记得候选码的定义吧,要求能够函数决定整个关系R的,而且它的真子集不能函数决定R。照这个标准来判断,我们看(S,J)可以作为候选码,因为学生选定某门课,就对应一个固定的教师,单独的学生和课程都不能决定老师;除此之外,(S,T)是不也可以作为候选码的?因为学生和老师定了,则选的课也就定下来了,但是,其中的S不能决定J和T,T不能决定S(!!!!!)。所以有两个候选码(S,J)和(S,T),这样看来,根据主属性的定义,出现在任何候选码中的属性均为主属性,则三个属性均为主属性,没有非主属性,所以自然满足3NF。

是否满足BCNF呢?就要看一下主属性的依赖关系了,根据定义,如果决定因素都包含码,则是BCNF,这里的T也是主属性,因为教师定了,课程也定了,但是T不包含码,所以不满足BCNF。大家对这里的理解主要是对候选码的定义上,候选码与其余属性的关系不一定要求是完全函数依赖的。这里列出来的3个函数依赖关系,第一个为完全函数依赖,第二个为部分函数依赖,第三个为完全函数依赖,因为决定因素为单个属性。

数据库 | 关系数据库 | 函数依赖 | 码_数据库_29

多值依赖

设R(U)是一个属性集U上的一个关系模式, X、 Y和Z是U的子集,并且Z=U-X-Y。关系模式R(U)中多值依赖 X→→Y成立,当且仅当对R(U)的任一关系r,给定的一对(x,z)值,有一组Y的值,这组值仅仅决定于x值而与z值无关

Teaching(C, T, B) C课程 T教员 B参考书

数据库 | 关系数据库 | 函数依赖 | 码_主属性_30

平凡多值依赖和非平凡的多值依赖若X→→Y,而Z=φ,

则称     X→→Y为平凡的多值依赖

否则称X→→Y为非平凡的多值依赖

性质:

1)多值依赖具有对称性

  若X→→Y,则X→→Z,其中ZUXY

(2)多值依赖具有传递性

  若X→→Y,Y→→Z, 则X→→Z –Y

3)函数依赖是多值依赖的特殊情况。

  若X→Y,则X→→Y

(4)若X→→Y,X→→Z,则X→→YÈ Z。

(5)若X→→Y,X→→Z,则X→→Y∩Z。

(6)若X→→Y,X→→Z,则X→→Y-Z,X→→Z -Y。

4NF

数据库 | 关系数据库 | 函数依赖 | 码_非主属性_31

数据库 | 关系数据库 | 函数依赖 | 码_多值依赖_32