数据库复习四

# 关系模式设计引论

一个完整的关系模型内涵的定义:

  • 关系名
  • 属性集
  • 关系的域
  • 属性到域上的映射关系
  • 数据依赖

关系模式通常简记为:R (U,F)。

一个没有设计号的关系模式通常会有以下问题:

  • 数据冗余太大
  • 更新异常
  • 插入异常
  • 删除异常

# 函数依赖与规范化

规范化:指定义一组关系模式应符合的条件 (范式),而符合这些条件的关系模式就不存在某些操作异常,冗余也会减少

# 一、函数依赖 (简写 FD)

定义:设 R (U) 是一个属性集 U 上的关系模式,X 和 Y 是 U 的子集。若对于 R (U) 的任意一个可能的关系 r,r 中不可能存在两个元组在 X 上的属性值相等,而在 Y 上属性值不等,则称 "X 函数确定 Y" 或 "Y 函数依赖于 X",记作XYX\rightarrow Y (读作 X 决定 Y)。X 称为函数的决定因素

  • XYX\rightarrow Y,则 X 称为这个函数的决定属性组,也称为决定因素
  • XY,YXX\rightarrow Y,Y\rightarrow X,则记作XYX\leftrightarrow Y
  • YY 不函数依赖与XX,则记作XYX\nrightarrow Y

在一个关系模式 R (U) 中,对于 U 的子集 X 和 Y

  • 若 X 和 Y 有 1:1 关系,则XY,YXX\rightarrow Y,Y\rightarrow X,记作XYX\leftrightarrow Y
  • 若 X 和 Y 有 1:m 关系,则记作YXY\rightarrow X,但XYX\nrightarrow Y
  • 若 X 和 Y 有 n:m 关系,则 X 和 Y 不存在任何函数依赖
# 1、完全函数依赖

定义:在关系模式 R (U) 中,如果XYX\rightarrow Y,并且对于 X 的任何一个真子集XX^\prime,都有XYX^\prime\nrightarrow Y,则称 Y 完全依赖于 X,记作XFYX\xrightarrow{F}Y

# 2、部分函数依赖

定义:在关系模式 R (U) 中,如果XYX\rightarrow Y,存在 X 的真子集XX^\prime,有XYX^\prime\nrightarrow Y,则称 Y 部分依赖于 X,记作XPYX\xrightarrow{P}Y

# 3、传递函数依赖

定义:在关系模式 R (U) 中,如果XYX\rightarrow Y,(YXY\nsubseteq X),YXY\nrightarrow XYZY\rightarrow Z,则有XZX\rightarrow Z,称 Z 传递函数依赖于 X,记为:XTZX\xrightarrow{T}Z

注意:如果YXY\rightarrow X,即XYX\leftrightarrow Y,则 Z 直接依赖于 X;如果YXY\subseteq X,则XPZX\xrightarrow{P}Z

定义:设 K 为关系模式 R<U,F> 中的属性或属性组。若KFUK\xrightarrow{F}U,则 K 称为 R 的一个候选码。若关系中有多个候选码,则选定其中的一个作为主码。候选码常常简称为码

主码的两个性质:

  • 决定性:KUK\rightarrow U
  • 最小性:¬KK\lnot\exists K^\prime\subset K,使得KUK^\prime\rightarrow U

主属性:所有候选码中出现的属性

非主属性:不出现在任何候选码中的属性

全码:由关系模式的所有属性构成码

# 二、关系模式的规范化

# 1、范式

范式是符合某一类满足一定要求的关系模式的集合

(1)1NF1NF

定义:如果一个关系模式 R 的所有属性都是不可分的基本数据项,则称关系 R 为第一范式的关系模式,简称关系 R 属于第一范式,记为R1NFR\in 1NF

注意:第一范式是对关系模式的最起码的要求。不满足第一范式的数据库不能称为关系数据库。(由关系属性的原子性得出)。但是满足第一范式的关系模式并不一定是一个好的关系模式。

(2)2NF2NF

定义:若关系模式R1NFR\in 1NF,并且每一个非主属性都完全函数依赖于 R 的码,则R2NFR\in2NF

不属于 2NF 的关系模式存在的问题:

  • 插入异常
  • 删除异常
  • 数据冗余度大
  • 修改复杂

(3)3NF3NF

定义:若关系模式 R<U,F> 中若不存在这样的码 X,属性组 Y 及非主属性 Z (ZYZ\nsubseteq Y),使得XY,(YX),YZX\rightarrow Y,(Y\nrightarrow X),Y\rightarrow Z,成立,则称R3NFR\in 3NF

说明:3NF 是指不含纯粹的非主属性对码的传递依赖的关系模式

不适于 3NF 的关系模式存在的问题:

  • 插入异常
  • 删除异常
  • 数据冗余度大
  • 修改复杂

定理:如果R3NFR\in 3NF,则R2NFR\in 2NF

证明:R3NFR2NFR2NFR3NFR\in 3NF\Rightarrow R\in 2NF \Leftrightarrow R\notin 2NF\Rightarrow R\notin 3NF

RR 不属于 2NF,则存在非主属性 A 部分依赖于码 K,KPAK\xrightarrow{P} A,即不存在KKK^\prime\sub K,使得KAK^\prime\rightarrow A;又KKK^\prime\sub K,则KKK\rightarrow K^\prime;即存在KK,KA,KK,AKK\rightarrow K^\prime,K^\prime\rightarrow A,K^\prime\nrightarrow K,A\nsubseteq K^\prime,由 3NF 定义,R 不属于 3NF

推论:R3NFR\in 3NF,则 R 中的每一个非主属性既不部分依赖于码,也不传递依赖于码

总结:

1NF 是指关系模式中所有属性都满足原子性,是关系模式的最低要求

2NF 是指关系模式中不存在非主属性 (组) 对码的部分依赖

3NF 是指关系模式中不存在非主属性 (组) 对码的传递依赖

范式级别越高,其存在的操作异常和数据冗余越小

(4)BCNFBCNF

定义:设关系模式R<U,F>1NFR<U,F>\in 1NF,如果对于 R 的每个函数依赖XY(YX)X\rightarrow Y(Y\nsubseteq X),X 必包含码,则RBCNFR\in BCNF,又称修正 (或扩充) 的第三范式

结论:

  • BCNF3NFBCNF\sub 3NF

    证明:上式可写成RBCNFR3NFR\in BCNF\Rightarrow R\in 3NF

    ​ 等价于R3NFRBCNFR\notin 3NF \Rightarrow R\notin BCNF

    ​ 若R3NFR\notin 3NF,则存在码 X,属性组 Y 及非主属性 Z (ZYZ\nsubseteq Y) 使得XY,YZX\rightarrow Y,Y\rightarrow Z 成立,但是 Y 是属性组不一定含码

    ​ 由 BCNF 定义得RBCNFR\notin BCNF,因此结论成立

  • RBCNFR\in BCNF,则 R 中所有非主属性对每一个码都完全函数依赖 (由 2NF 定义得到)

  • RBCNFR\in BCNF,则 R 中所有主属性对每一个不包含它的码都完全函数依赖

  • RBCNFR\in BCNF,则 R 中没有任何属性完全依赖于非码的任何一组属性

不属于 BCNF 的关系模式存在问题:

  • 插入异常
  • 删除异常
  • 数据冗余度大
  • 修改复杂

结论:BCNF 消除了主属性对码的部分依赖和传递依赖,在函数依赖的范畴内解决了数据插入异常和删除异常,但可能存在着数据冗余和修改复杂

# 三、数据依赖的公理系统

# 1、函数依赖的公理系统

定义:设关系模式 R<U,F>,其中 F 是属性 U 上的函数依赖集,X,YUX,Y\sub U,对其任何一个关系实例 r,若函数依赖XYX\rightarrow Y 都成立,则称 F 逻辑蕴含XYX\rightarrow Y,记为FXYF\vDash X\rightarrow Y

  • Armstrong 公理系统:

    设关系模式 R<U,F>,其中 F 是属性集 U 上的函数依赖集,对关系模式 R<U,F > 有以下推理规则:

    • 自反律:若YXUY\subseteq X \subseteq U,则FXYF\vDash X\rightarrow Y
    • 增广律:若FXY,ZUF\vDash X\rightarrow Y,Z\subseteq U,则FXZYZF\vDash XZ\rightarrow YZ
    • 传递率:若FXY,FYZF\vDash X\rightarrow Y,F\vDash Y\rightarrow Z,则FXZF\vDash X\rightarrow Z
    • 合并规则:{XY,XZ}XYZ\{X\rightarrow Y,X\rightarrow Z\}\vDash X\rightarrow YZ
    • 分解规则:{XY,ZY}XZ\{ X\rightarrow Y,Z\subseteq Y\}\vDash X\rightarrow Z
    • 伪传递规则:{XY,WYZ}WXZ\{X\rightarrow Y,WY\rightarrow Z\}\vDash WX\rightarrow Z
  • 模式分解的原则

    • 分解保证无损连接性
    • 分解至少应达到 3NF,尽可能达到 BCNF
    • 分解应尽可能保持函数依赖和多值依赖
# 2、函数依赖集的闭包

定义:设关系模式 R<U,F> 中为 F 所逻辑蕴含的函数依赖的全体叫做 F 的闭包,即为F+F^+

F+F^+ 的意义:包含了给定函数依赖集 F (部分) 所蕴含的属性集 U 上的全部函数依赖。缺点:依赖信息太庞杂,难管理属性集的闭包

定义:设 F 为属性集 U 上的一组函数依赖,XUX\subseteq U,X 关于函数依赖集 F 的闭包XF+={AXAX_F^+=\{A\vert X\rightarrow A 能由 Armstrong 公理导出}\}

XF+X_F^+ 算法:

(1) 令X(0)=X,i=0X^{(0)}=X,i=0

(2) 令X(i+1)=X(i){A(V)(W)(VWFVX(i)AW)};X^{(i+1)}=X^{(i)}\cup\{A\vert(\exists V)(\exists W)(V\rightarrow W\in F\land V\subseteq X^{(i)}\land A\in W) \};

(3) 若X(i+1)=X(i)X^{(i+1)}=X^{(i)},或X(i+1)=UX^{(i+1)}=U 算法结束,XF+=X(i+1);X_F^+=X^{(i+1)}; 否则,令 i=i+1,转 (2)

例:已知关系模式 R<U,F>,其中U={A,B,C,D,E}.F={ABC,BD,CE,ECB,ACB}U=\{A,B,C,D,E \}.F=\{AB\rightarrow C,B\rightarrow D,C\rightarrow E,EC\rightarrow B,AC\rightarrow B\},求(AB)F+(AB)_F^+

解:(AB)F+(AB)^+_F,由ABCAB\rightarrow C 得到ABCABC,由BDB\rightarrow D 得到ABCDABCD,由CEC\rightarrow E 得到ABCDEABCDE,此时(ABCDE)=U(ABCDE)=U,结束,因此(AB)F+=(AB)^+_F=