关系规范化的需求和背景

数据依赖分类:函数依赖,多值依赖,连接依赖

函数依赖

对于函数Y=f(x)可以说成X函数决定Y,也可以说成Y函数依赖于X

举个例子:在关系数据库中讨论函数或函数依赖注重的是语义上的关系,如省=f(城市) ,只要给出一个具体的城市值,就会有唯一的省值与之对应,这里“城市”是自变量X,“省”是因变量或函数值Y。并且把X函数决定Y或Y函数依赖于X表示为:X→Y

image-20230607095559081

非平凡依赖

如果X→Y,但是Y不包含于X,则称X->Y是非平凡的函数依赖。一般讨论非平凡依赖才有意义。X称为决定因子

完全依赖和非完全依赖

如果X→Y,对于任意的真子集X’都有X’无法推出Y,则称Y完全函数依赖于X,记作image-20230607100116337

如果可以推出X’→Y,则说明Y部分函数依赖于X,记作image-20230607100205178

举例image-20230607100240127

传递函数依赖

如果X→Y(非平凡依赖,并且Y不依赖于X),Y→Z,则称Z传递依赖于X,即X→Z

等价

如果X → Y且 Y → X,则X与Y一一对应,即X与Y等价,记为Y↔X。

一般是1:1的关系才是等价依赖

关系规范中的函数依赖理论

image-20230607101250298

对于这个题,我一开始很疑惑,为什么候选键不能是(Sid,Cid,Tid),这种想法就犯了一个错误,对于候选键的定义还是不清楚

候选键:不含有多余属性的超键称为候选键

主键就是从候选键中随机选出一个来作为主键的,所以他们一定是最小属性的集合

在这里由于Cid可以决定Tid,所以候选键就不能是(Sid,Cid,Tid)。

最小函数依赖

定义:

如果F满足下列条件,则称F是最小的函数依赖集

  • ①F中每个函数的右边都只有一个属性
  • ②对F中的任何函数依赖A→B,都不存在A的一个真子集C,使函数依赖C →B代替函数依赖 A→B后得到和原来的F等价的一组依赖。
  • ③从F中移出任何一个函数依赖都无法再得到和原来的F等价的一组函数依赖。

条件:①确保每个函数依赖都符合标准的形式,条件②、 ③确保这些函数依赖中没有冗余。

计算最小函数依赖集的方法

(1)用分解的法则:使F中的任何一个函数依赖的右部仅含一个属性

(2)去掉多余的函数依赖:从第一个函数依赖X→Y开始将其从F中去掉,然后在剩下的函数依赖中求X的闭包X+,看X+是否包含Y,若是,则去掉X→Y;否则不能,依次下去,直到找不到冗余的函数依赖

闭包的定义:X+ 可以理解为X+表示所有X可以决定的属性

闭包的求法:

属性集闭包的步骤:

  1. 设要求的闭包属性集是Y,把Y初始化为X.
  2. 检查函数依赖集F中的每个函数依赖A->B,如果属性集A中的所有属性都在Y中而B中有属性不在Y中,则将其加入到Y中。
  3. 重复第二步,直到没有属性可以添加到Y中为止。最后得出的Y就是X+。

(3)去掉依赖左部多余的属性:一个一个地检查函数依赖左部非单个属性的依赖,例如XY→A,若要判断Y为多余的,则以X→A代替XY→A是否等价,若A(X)+,则Y为多余属性,可以去掉

来一道例题:image-20230607102753016

(1)首先分解属性,

F={AD→E,AC→E,BC→F,BCD→A,BCD→F,BD→A,AB→F,A→C}

(2)去掉多余的函数依赖

  • AD→E (AD)+ ={ADCE},包含E,故AD→E可以去除

    求法:按照上面的步骤

    1. 首先把闭包Y初始化为AD
    2. 由于A→C所以Y=ADC
    3. 由于AD→E所以Y=ADCE
    4. 没有属性可以添加,结束
  • AC→E (AC)+={AC} E不属于AC 所以保留

  • BC→F (BC)+={BC} F不属于BC,所以保留

  • BCD→A (BCD)+={BCD A E F} A属于BCDAEF去除

  • BCD→F 同上,去除

  • BD→A (BD)+={BD}A不属于BD,保留

  • AB→F (AB)+={AB C E F} F属于ABCEF 去除

  • A→C A+={A} C不属于A,保留

则 保留了 AC→E BC→F BD→A A→C

(3)去掉依赖左部多余的属性

由于A+=AC,所以AC→E 可以变成A→E

综上F的最小函数依赖集为{A→E , BC→F , BD→A , A→C}

Armstrong公理

  • 自反性:如果B是A的子集,则A→B。
  • 增广性:如果A→B,则A,C→B,C。
  • 传递性:如果A→B并且B→C,则A→C。

关系规范化

关系模式:设U表示关系模式R的属性全集U={A1,A2,…,An},F表示关系模式R上的函数依赖集,则关系模式R可以表示为:R(U,F)。

候选键:完全依赖:

设K为R(U,F)中的属性或属性组,若image-20230607111118016,则K为R的候选键。(K为决定R中全部属性值的最小属性组。)

主键:关系R(U,F)中可能有多个候选键,则选其中一个作为主键;

全键:候选键为整个属性组

主属性和非主属性:在R(U,F)中,包含在任一候选键中的属性称为主属性,不包含在任一候选键中的属性称为非主属性。

外键:若R(U,F)的属性(组)X(X属于U)是另一个关系S的主键,则称X为R的外键。(X必须先被定义为S的主键)。