函数依赖、码、范式
函数依赖
- 设R(U)是一个属性集U上的关系模式,X和Y是U的子集若对于R(U)的任意一个可能的关系r,r中不可能存在两个元组在X上的属性值相等, 而在Y上的属性值不等, 则称 “X函数确定Y” 或 “Y函数依赖于X”,记作X→Y。
- X称为这个函数依赖的决定属性集(Determinant)。
- Y=f(x)
函数依赖可以从不同的角度分为
- 平凡函数依赖与非平凡函数依赖
- 完全函数依赖与部分函数依赖
- 传递函数依赖
平凡函数依赖与非平凡函数依赖
完全函数依赖与部分函数依赖
- 定义:
-
- 在关系模式R(U)中,如果X→Y,并且对于X的任何一个真子集X ′ ,都有
-
- X′ → Y, 则称Y完全函数依赖于X,记作X → Y。
-
- 若X→Y,但Y不完全函数依赖于X,则称Y部分函数依赖于X,记作X→ Y。
传递函数依赖
- 定义 在关系模式R(U)中, 如果X→Y, (Y X), Y→X ,Y→Z,则称Z传递函数依赖于X,记为:X → Z
-
- 注: 如果Y→X, 即X←→Y,则Z直接依赖于X。
- 注: 如果Y→X, 即X←→Y,则Z直接依赖于X。
码
- 定义:设K为R<U,F>中的属性或属性组合。若K U,则K称为R的侯选码(Candidate Key)。
- 若候选码多于一个,则选定其中的一个做为主码(Primary Key)。
-
- 主属性和非主属性
-
- 全码
- 全码
范式
- 范式是符合一种级别的关系模式的集合
- 关系数据库中的关系必须满足一定的要求,满足不同程度的为不同的范式
范式的种类
- 某一关系模式R为第n范式,可简记为R∈nNF。
- 一个低一级范式的关系模式,通过模式分解可以转换为若干个高一级范式的关系模式的集合,这种过程就叫规范化
1NF
- 定义:
-
- 如果一个关系模式R的所有属性都是不可分的基本数据项,则R∈1NF。简单一点来说,符合1范式的关系,就是不存在表中套表的情况
-
- 关系中不存在重复行、多值列
-
- 第一范式是对关系模式的最起码的要求。不满足第一范式的数据库模式不能称为关系数据库
-
- 满足第一范式的关系模式并不一定是一个好的关系模式。
2NF
- 定义:
-
- 若R∈1NF,且每一个非主属性完全函数依赖于码,则R∈2NF
3NF
- 定义:
-
- 关系模式R<U,F> 中若不存在这样的码X、属性组Y及非主属性Z(Z Y), 使得X→Y,Y → X,Y→Z,成立,则称R<U,F> ∈ 3NF。
- 关系模式R<U,F> 中若不存在这样的码X、属性组Y及非主属性Z(Z Y), 使得X→Y,Y → X,Y→Z,成立,则称R<U,F> ∈ 3NF。
-
- 若R∈3NF,则R的每一个非主属性既不部分函数依赖于候选码也不传递函数依赖于候选码。
-
- 如果R∈3NF,则R也是2NF。
-
- 采用投影分解法将一个2NF的关系分解为多个3NF的关系,可以在一定程度上解决原2NF关系中存在的插入异常、删除异常、数据冗余度大、修改复杂等问题。
-
- 将一个2NF关系分解为多个3NF的关系后,并不能完全消除关系模式中的各种异常情况和数据冗余。
实例分析
- 第一步:将UNF转换成1NF,方法是剔除表中所套的表
转换成1NF后,关系还存在:
-
- 插入异常
-
- 删除异常
-
- 数据冗余度大
-
- 修改复杂
-
第二步:将符合1NF的关系分解成符合2NF的多个关系
-
-
在2NF关系模式中,Sgrade(Sno,Cno,Grade,Result)中存在以下的函数依赖
-
- (Sno, Cno)→Grade
-
- Grade → (Sno, Cno)
-
- Grade→Result
-
- (Sno, Cno) → Result
-
- Result传递函数依赖于(Sno, Cno) ,即Sgrade中存在非主属性 对码的传递函数依赖。
- 此问题解决方法
BCSN
- 定义:
-
- 关系模式R<U,F>∈1NF,若X→Y且Y X时X必含有码,则R<U,F> ∈BCNF。
若R∈BCNF
- 所有非主属性对每一个码都是完全函数依赖
- 所有的主属性对每一个不包含它的码,也是完全函数依赖
- 没有任何属性完全函数依赖于非码的任何一组属性
BCNF的关系模式所具有的性质
- 所有非主属性都完全函数依赖于每个候选码
- 所有主属性都完全函数依赖于每个不包含它的候选码
- 没有任何属性完全函数依赖于非码的任何一组属性