DB
规范化
函数依赖
定义:设一个关系为R(U),X和Y为属性集U上的子集,若对于X上的每个值都有Y上的一个唯一值与之对应,则称X和Y具有函数依赖关系,并称X 函数决定Y,或称Y函数依赖于X,记作X→Y,称X为决定因素。
简单来说,函数依赖就是知道A的可以确切地知道B。
PS:函数依赖是属性间的一种关系。
平凡函数依赖和非平凡函数依赖
定义:在关系模式R(U,F)中,对于U的子集X、Y,如果X→Y,但Y不是X的真子集,则称X→Y是非平凡函数依赖;如果Y是X的真子集,则称X→Y是平凡函数依赖。
ps:若不特别声明,本书中讨论的是非平凡函数依赖。
例:
- (SNo, CName) → Score — 非平凡函数
$$(Score) \not\subseteq (SNo, CName)$$ - (SNo, CName) → CName — 平凡函数
$$(CName) \subseteq (SNo, CName)$$
完全/部分函数依赖
定义:在R(U,F)中,
如果X→Y,对于X的任一真子集X’,都有X’ -\> Y,则称Y对X完全函数依赖,记为X -f> Y;
否则,称Y对X是部分函数依赖,记为X -p> Y;
- 超键(super key):在关系中能唯一标识元组的属性集称为关系模式的超键
- 候选键(candidate key):不含有多余属性的超键称为候选键
- 主键(primary key):用户选作元组标识的一个候选键程序主键
- 外键(foreign key):如果关系模式R1中的某属性集不是R1的主键,而是另一个关系R2的主键则该属性集是关系模式R1的外键。
只要能唯一标识元组的属性集都能称为超键,如学生表中含有学号或者身份证号的任意组合都为此表的超键。
候选健属于超键,它是最小的超键,就是说如果再去掉候选键中的任何一个属性它就不再是超键了。
主键就是候选健里面的一个,是人为规定的。
外键比如学生表中的外键就是“教师编号”。外键主要用来描述两个表的关系。
候选键
定义:设K是关系模式R(U,F)中的属性或属性组,若K -f> U,则K为R的候选键,简称键。
候选键求解
对于给定的关系模式R(U)和函数依赖集F,可将其属性分为4类:
L
类 仅出现在的函数依赖左部
的属性;R
类 仅出现在的函数依赖右部
的属性;N
类 在的函数依赖左右两边均未出现
的属性;LR
类 在的函数依赖左右两边均出现
的属性。
推论:
- 若X是
L类
属性,则X必为R的任一候选键的成员
。 - 若X是
L类
属性,且X+包含了R的全部属性,则X必为R的唯一候选键
。 - 若X是
R类
属性,则X不再任何候选键中
。 - 若X是
N类
属性,则X必为R的任一候选键的成员
。 - 若X是
N类和L类组成的属性集
,且X+包含了R的全部属性,则X必为R的唯一候选键
。
范式
符合某一级别的关系的模式的集合。
满足不同程度要求的为不同范式。
主属性:候选码并集的属性。
非主属性:不在任何候选码中的属性。
第一范式(1NF)
如果一个关系模式R(U,F)的所有属性都是不可分的基本数据项,则属于1NF。
不满足1NF的数据库模式不能称为关系数据库模式。
第二范式(2NF)
满足第一范式的关系模式R(U,F),如果所有非主属性
都完全依赖于键
,则称R属于第二范式(2NF)。
第三范式(3NF)
满足第二范式的关系模式R(U,F),且它的任何一个非主属性
都不传递依赖于键
,则称关系R属于第三范式(3NF)。
在关系数据库模型设计中目前一般采用第三范式。
改进的3NF - BCNF
设关系模式R(U,F)属于第一范式,若X→Y且Y不是X的子集时X必包含键
,则称关系R属于BCNF。
一个满足BCNF的关系模式必然有:
- R中所有非主属性对每一个键都是完全函数依赖;
- R中所有主属性对每一个不包含它的键,都是完全函数依赖;
- R中没有任何属性完全函数依赖于非键的任何一组属性。
分解
无损连接分解
无损连接性:如果R与R1,R2,…,Rn自然连接的结果相等,则称关系模式R的分解具有无损连接性。
R被分解成R1和R2后,如果他们的公共属性集是R1或R2的主键,那么分解是无损的。
依赖保持分解
- 如果一个分解具有无损分解,则它能够保证不丢失信息。
- 如果一个分解保持了函数依赖,则它可以减轻或解决各种异常情况。
- 具有无损连接性的分解不一定保持函数依赖,保持函数依赖的分解不一定具有无损连接性。