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类 在的函数依赖左右两边均出现的属性。

推论:

  1. 若X是L类属性,则X必为R的任一候选键的成员
  2. 若X是L类属性,且X+包含了R的全部属性,则X必为R的唯一候选键
  3. 若X是R类属性,则X不再任何候选键中
  4. 若X是N类属性,则X必为R的任一候选键的成员
  5. 若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的主键,那么分解是无损的。

依赖保持分解

  • 如果一个分解具有无损分解,则它能够保证不丢失信息。
  • 如果一个分解保持了函数依赖,则它可以减轻或解决各种异常情况。
  • 具有无损连接性的分解不一定保持函数依赖,保持函数依赖的分解不一定具有无损连接性。