数据库系统概论(一)关系数据理论--函数依赖、码和范式
函数依赖
平凡/非平凡函数依赖
平凡函数依赖:对X→Y,Y⊆X
非平凡的函数依赖:对X→Y,Y⊈X
在后续讨论中,均以非平凡函数依赖进行讨论
完全/部分函数依赖
在关系模式R(U)中,若X→Y,且x的任何一个真子集X'不存在X→Y,则称Y完全函数依赖于X
传递/直接函数依赖
X→Y,Y!→X,Y→Z,称X→传递Z为传递依赖
X→Y,Y←X,称X←→Y为直接依赖
候选码(Candidate Key)=码
在R(U,F)中,K为U的属性或者属性集合,若KU,则称K为候选码
超键(Super Key)
能够唯一标识一条记录的属性或属性集
若U部分函数依赖于K,即KU,则K为超码
候选码是最小的超码
超码包含候选键
超键不一定是码,候选键和主键才是
主码(Primary Key)
若R有多个候选码,选一个作为主码
主属性(Prime Attribute)与非主属性(Nonprime Attribute)
包含在任意一个候选键中的属性都被称为主属性
不包含在任意一个的候选键中的属性被称为非主属性
全码(ALL-Key)
整个属性值U就是码(候选键),则U被称为全码
外码(Foreign Key)
关系模式R(U,F)中属性或属性组X并非R的码,但是是另外一个关系模式的码,则X称为外码
规范化
关系数据库中的关系满足某一定的要求,不同程度的要求称为范式
一个低一级范式的关系模式,通过模式分解(Schemm Decomposition)转化为更高级的范式,被称为规范化
1NF
一个关系模式R(U,F)所有属性都是不可分割的基本数据项
不满足第一范式的数据库模式不能称为关系数据模式
2NF
在1NF的基础上,去除非主属性对码(候选码)的部分函数依赖,即每一个非主属性都是完全依赖于主键的
3NF
在2NF的基础上,消除非主属性对码(候选码)的传递依赖
BCNF
在3NF中,依然有可能存在主属性传递依赖或者部分依赖的情况,如
关系模式STC(S,T,C)中,S表示学生,T表示教师,J表示课程。
函数依赖:(S,C)→T,(S,T)→C, T→C 其中,(S,C)和(S,T)都是候选码。
可以看出STJ是属于第三范式的,因为没有哪一组依赖关系中,非主属性传递或者部分依赖于码(候选码)(记住是非主属性,T在候选码中),但它不属于BC范式,因为T是决定因素,T不包含码(候选码的任何一个真子集都不能叫候选码)
则BCNF具有两个特征:
1.所有非主属性完全依赖于每一个码
2.所有主属性对不包含它的码也是完全依赖
各范式存在的问题
1NF
(学号,课程号)→(学院,学院电话,成绩,学分)
①部分函数依赖:课程→学分 这将导致
数据冗余:一门课程被选了N次那么学分就重复出现了N-1次
更新异常:如果一门课学分更改,则所有该课程的行都要修改
插入异常:如果要新增一门课程和它的学分,但是因为不存在学号所以不能插入
删除异常:如果删掉选修一门课程的所有学生的学号,那么该课程对应的学分关系也被删除
②传递函数依赖:学号→学院→学院电话 (实际上学号已经决定了学院电话)
数据冗余:有N个某学院的学生,那么该学院电话重复出现了N-1次
更新异常:如果要修改学院电话,那么所以该学院的学生元组都要修改
插入异常:如果要新增一个学院和它的电话,由于缺少学号无法插入
删除异常:如果删除一个学院所有学号,那么学院对应的电话关系也将删除
两种函数依赖导致的问题内容上都是一样的,只是引起的原因不尽相同
2NF
只有传递函数依赖的问题
3NF
消除了各类问题