数据库的规范化

Posted by wzc on 2021-03-31
0 函数依赖和码
  1. 完全函数依赖和部分函数依赖

    在R(U)中,如果X->Y,并且对于X的任何一个真子集X‘都有X’↛Y,则称Y对X完全函数依赖。相反,称为部分函数依赖

  2. 传递函数依赖

    如果X->Y,Y->Z,且Y不包含于X,Y↛X,则称Z传递函数依赖于X。

    内容参考于https://blog.csdn.net/sumaliqinghua/article/details/85872446

    20190625173457198

    • 码=超键:能够唯一标识一条记录的属性或属性集(要标识一行数据)
      • 如:学号、学号+姓名、学号+性别、全码等
    • 候选码:能够唯一标识一条记录的最小属性集
      • 学生信息表中:学号和身份证号为两个候选码
      • 反例:仓库号->所在区域,所在区域->区域主管,但所在区域不是候选码,也就不是主属性了
    • 主键:在候选码中人为选的
    • 主属性:所有候选码包含的属性
    • 非主属性:所有侯选码不包含的属性
    1. 练习题

    https://blog.csdn.net/sumaliqinghua/article/details/85872446

1 第一范式

​ 定义:如果关系模式R中的所有属性均为简单属性,即每个属性都是不可再分的,则称R属于第一范式,简称1NF

要点:每个属性都是不可再分的

2 第二范式

​ 定义:如果关系模式R属于第一范式,且每个非主属性都完全函数依赖于R的码,则称R属于第二范式,简称2NF

要点:每个非主属性都完全函数依赖于码

​ 例如:

​ 有关系模式WAE(仓库号,设备号,数量,所在区域,区域主管),其中,

1
2
3
4
5
(仓库号,设备号)->数量

仓库号->所在区域,(仓库号,设备号)->所在区域

仓库号->区域主管,(仓库号,设备号)->区域主管

​ 可知,仓库号、设备号为主属性,数量、所在区域、区域主管为非主属性。所有属性均不可再分,所以属于1NF。但所在区域和区域主管两个非主属性不是完全函数依赖关系,所以不是2NF范式

​ 规范办法:投影分解法

​ 将上述WAE关系模式分解为:

​ WE(仓库号,设备号,数量)

​ WA(仓库号,所在区域,区域主管)

​ 其中,WE码为(仓库号,设备号)函数依赖为

1
(仓库号,设备号)->数量

​ WA码为(仓库号),非主属性为所在区域和区域主管,函数依赖为

1
(仓库号)->所在区域,所在区域->区域主管,(仓库号)->区域主管【传递】
3 第三范式

​ 定义:如果关系模式R属于2NF,且每个非主属性都不传递函数依赖于R的候选码,则称R属于第三范式,简称3NF。

要点:每个非主属性都不存在传递函数依赖

​ 例如:

​ 在上述关系模式WA中,存在传递函数依赖,不符合3NF 范式

 规范方法:投影分解法

​ 将WA分解为两个模式:

​ W(仓库号,所在区域)

​ A(所在区域,区域主管)

​ 在W关系中,码为仓库号,函数依赖为:

1
仓库号->所在区域

​ 在A关系中,码为所在区域,函数依赖为:

1
所在区域->区域主管
4 BC范式/BCNF范式

定义:如果关系模式R属于1NF,且对于所有的函数依赖X- >Y(Y∉X),决定因素X都包含了R的一个候选码,则称R属于BC范式,简称BCNF

要点(特征):

  • 所有非主属性都完全函数依赖于每个候选码
  • 所有主属性都完全依赖于每个不包含它的候选码
  • 没有任何属性完全函数依赖于非码的任何一组属性

BC范式既检查主属性,又检查非主属性,可以说,任何满足BC范式的关系都必然满足第三范式。

上述关系W和A中,都只有一个主键,作为唯一的候选码,且都只有一个函数依赖,为完全函数依赖,符合BC范式的条件。