【Hbu数据库】第六章总结

规范化

关系模式

一个关系模式应当是一个五元组
R(U,D,DOM,F)

  • 关系名R是符号化的元组语义
  • U为一组属性
  • D为属性组U中的属性所来自的域
  • DOM为属性到域的映射
  • F为属性组U上的一组数据依赖

本章主要看R<U,F>

第一范式

二维表每个分量必须是不可分开的数据项。
满足了这个条件的关系模式就属于:
第一范式(1NF)

数据依赖

  • 是一个关系内部属性与属性之间的一种约束关系

  • 通过属性间值的相等与否体现出来的数据间相互联系

  • 是现实世界属性间相互联系的抽象

  • 是数据内在的性质

  • 是语义的体现

重要的数据依赖:
函数依赖 多值依赖

关系模式的负面例子

建立一个描述学校教务的数据库。

  • 学号(Sno)
  • 所在系(Sdept)
  • 系主任姓名(Mname)
  • 课程号(Cno)
  • 成绩(Grade)

假设学校教务的数据库模式用一个单一的关系模式Student来表示,则该关系模式的属性集合为:
U ={Sno, Sdept, Mname, Cno, Grade}
现实世界的已知事实(语义):

  • 一个系有若干学生, 但一个学生只属于一个系;
  • 一个系只有一名(正职)负责人;
  • 一个学生可以选修多门课程,每门课程有若干学生选修;
  • 每个学生学习每一门课程有一个成绩。

由此可得到属性组U上的一组函数依赖F:
F={Sno→Sdept, Sdept→ Mname, (Sno, Cno)→ Grade}
在这里插入图片描述
关系模式{Sno, Sdept, Mname, Cno, Grade}中存在的问题
(1)数据冗余
浪费大量的存储空间:每一个系主任的姓名重复出现
(2)更新异常(Update Anomalies)
更新数据时,维护代价大:某系更换系主任后,须修改有关的每一个元组。
(3)插入异常(Insertion Anomalies)
如果一个系刚成立,尚无学生,则无法把这个系及其系主任存入数据库。
(4)删除异常(Deletion Anomalies)
如果某个系的学生全部毕业了, 则在删除该系学生信息的同时,把这个系及其系主任的信息也丢掉了。
Student关系模式不是一个好的模式。一个“好”的模式应当不会发生插入异常、删除异常和更新异常,数据冗余应尽可能少。
用规范化理论改造关系模式来消除其中不合适的数据依赖
把这个单一的模式拆成三个关系模式:
S(Sno,Sdept,Sno → Sdept);
SC(Sno,Cno,Grade,(Sno,Cno) → Grade);
DEPT(Sdept,Mname,Sdept → Mname);
这三个模式都不会发生插入异常、删除异常的问题,数据的冗余也得到了控制。

函数依赖

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

  • X → Y X\rightarrow Y XY Y ⊄ X Y \not\subset X YX 则称 X → Y X\rightarrow Y XY是非平凡的函数依赖
  • X → Y X\rightarrow Y XY Y ⊂ X Y \subset X YX则称 X → Y X\rightarrow Y XY是平凡的函数依赖,对于任一关系模式,平凡函数依赖都是必然成立的。
  • X → Y X \rightarrow Y XY Y → X Y \rightarrow X YX则记作 X ← → Y X\leftarrow \rightarrow Y XY
  • 若Y不函数依赖于X 则记作 X ↛ Y X \not \rightarrow Y XY

完全函数依赖

在R(U)中,
如果X→Y,并且对于X的任何一个真子集X’, 都有 X’ ↛ Y, 则称Y对X完全函数依赖,记作 X ⟶ F Y X \stackrel {F} {\longrightarrow} Y XFY
若X→Y,但Y不完全函数依赖于X,则称Y对X部分函数依赖,记作 X ⟶ P Y X \stackrel {P} {\longrightarrow} Y XPY
比如 ( s n o , c n o ) ⟶ F g r a d e (sno,cno) \stackrel {F} {\longrightarrow} grade (sno,cno)Fgrade是完全函数依赖, ( s n o , c n o ) ⟶ P s d e p t (sno,cno) \stackrel {P} {\longrightarrow} sdept (sno,cno)Psdept

传递函数依赖

在R(U)中,如果X→Y(Y⊈X),Y↛X,Y→Z,Z⊈Y, 则称Z对X传递函数依赖。记为:X → Z。

如果Y→X, 即X←→Y,则Z直接依赖于X,而不是传递函数依赖。

设K为R<U,F>中的属性或属性组合。若 K ⟶ F U K \stackrel {F} {\longrightarrow} U KFU,则K称为R的一个 候选码
注意是完全函数依赖,如果U部分依赖于K,则K称为超码
候选码是最小的超码
若候选码多余一个,则选定其中一个为主码
包含在任何一个候选码中的属性为 主属性
不包含在任何候选码中的属性称为非主属性

  S(Sno, Sdept, Sage),单个属性Sno是码
  SC(Sno, Cno, Grade)中,(Sno, Cno)是码

关系模式 R中属性或属性组X 并非 R的码,
但 X 是另一个关系模式的码,
则称 X 是R 的外部码(Foreign key)也称外码

SC(Sno,Cno,Grade)中,Sno不是码
Sno是 S(Sno,Sdept,Sage)的码,则Sno是SC的外码 

范式

一个低一级范式的关系模式,通过模式分解可以转换为若干个高一级范式的关系模式的集合,这种过程就叫规范化在这里插入图片描述

2NF

关系模式R∈1NF,并且每一个非主属性都完全函数依赖于任何一个候选码

R ⊂ 2 N F R \subset 2NF R2NF
一个关系模式不属于2NF,会产生以下问题:

  • 插入异常

  • 删除异常

  • 修改复杂
    不是2NF的例子

      S-L-C(Sno,Sdept,Sloc,Cno,Grade), Sloc为学生的住处,
      并且每个系的学生住在同一个地方。S-L-C的码为(Sno,Cno)。
      函数依赖有
      (Sno,Cno)→Grade
      Sno→Sdept, (Sno,Cno)→Sdept
      Sno→Sloc, (Sno,Cno)→Sloc
      Sdept→Sloc
    

非主属性Sdept、Sloc并不完全依赖于码 故不属于2NF

3NF

设关系模式R<U,F>∈1NF,若R中不存在这样的码X,属性组Y及非属性组Z(Z ⊉ Y)使得X→Y,Y→Z成立,Y↛ X,则称R<U,F>∈3NF

SC没有传递依赖,因此SC ∈ 3NF
S-L中Sno →Sdept( Sdept ↛ Sno), Sdept→Sloc,可得Sno → Sloc。
解决的办法是将S-L分解成
S-D(Sno,Sdept)∈ 3NF
D-L(Sdept,Sloc)∈ 3NF

BCNF

关系模式R<U,F>∈1NF,若X → Y且 Y ⊈ X 时X必含有码,则R<U,F>∈BCNF。即在R中,每一个决定因素都包含码。

(即看所有“左边”的内容 是否都包含码)

一个满足BCNF的关系模式有:

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

不属于BCNF的例子

关系模式STJ(S,T,J)中,S表示学生,T表示教师,J表示课程。每一教师只教一门课。
每门课有若干教师,某一学生选定某门课,就对应一个固定的教师。
由语义可得到函数依赖:(S,J)→T;(S,T)→J;T→J

候选码:(S,J),(S,T);
没有非主属性
因为没有非主属性对码传递依赖或部分依赖,STJ ∈ 3NF。
因为T是决定因素,而T不包含码,所以STJ不是 BCNF范式。

多值依赖

设R(U)是属性集U上的一个关系模式。X,Y,Z是U的子集,并且Z=U-X-Y。关系模式R(U)中多值依赖X→→Y成立,当且仅当对R(U)的任一关系r,给定的一对(x,z)值,有一组Y的值,这组值仅仅决定于x值而与z值无关。

 Teaching(C, T, B)
Teaching具有唯一候选码(C,T,B), 即全码。Teaching∈BCNF
对于C的每一个值,T有一组值与之对应,而不论B取何值。
因此T多值依赖于C,即C→→T

平凡多值依赖和非平凡的多值依赖

  • 若X→→Y,而Z=Ф,则称X→→Y为平凡的多值依赖。
  • 否则称X→→Y为非平凡的多值依赖。

4NF

关系模式R<U,F>∈1NF,如果对于R的每个非平凡多值依赖X→→Y(Y ⊈ X),X都含有码,则R<U,F>∈4NF。

WSC中,W →→S, W→→C,他们都是非平凡多值依赖。而W不是码,关系模式
WSC的码是(W,S,C),即All-key,因此WSC ∈ 4NF。

小结

在这里插入图片描述

求码

闭包(记作X+ )就是由一个属性直接或间接推导出的所有属性的集合。

对于给定的关系R(A1,A2,…An)和函数依赖集F,可将其属性分为4类:
 L类     仅出现在函数依赖左部的属性。
 R 类   仅出现在函数依赖右部的属性。
 N 类   在函数依赖左右两边均未出现的属性。
 LR类  在函数依赖左右两边均出现的属性。

定理:
对于给定的关系模式R及其函数依赖集F,
若X(X∈R)是L类属性,则X必为R的任一候选码的成员。
推论:
对于给定的关系模式R及其函数依赖集F,
若X(X∈R)是L类属性,且X+包含了R的全部属性;
则X必为R的唯一候选码。

设有关系模式R(A,B,C,D),
其函数依赖集F={D→B,B →D,AD →B,AC →D},求R的所有候选码。

考察F发现
A,C两属性是L类属性,所以AC必是R的候选码成员,又因为(AC)+=ABCD,所以AC是R的唯一候选码。

定理:对于给定的关系模式R及其函数依赖集F,
若X(X∈R)是R类属性,则X不在任何候选码
定理:对于给定的关系模式R及其函数依赖集F,
若X(X∈R)是N类属性,则X必包含在R的任一候选码中。
推论:对于给定的关系模式R及其函数依赖集F,
若X(X∈R)是L类和N类组成的属性集,且X+包含了R的全部属性;则X是R的唯一候选码。

设关系模式 U=(A , B , C , D ),
函数依赖集 
F={D→ B , B → D , AD → B , AC → D}, 
求 U 的候 选码。

求:
L: A C
LN:D B
R:无 N:空
L U N =(A,C)
且 因为(AC) + = ACBD = U,
所以AC为唯一候选码

R<U,F>,U=(A,B,C,D,E,G),
F={AB→C,CD→E,E→A,A→G},
求候选码。

(1) L=(B,D), R=(G), LR=(A,C,E ), N=空;
(2) L∪N=(B,D), (BD)+=BD;
(3)ABD:AB→C,CD→E, A→G,
所以(ABD)+ = ABDCEG = U BDC:CD→E, E→A, A→G
所以(BDC)+ = BDCEAG = U BDE:E→A, A→G, AB→C,
所以(BDE)+ = BDEAGC = U
候选码有3个分别是ABD、BCD和BDE

设关系模式 U=(A , B , C , D , E , F ),
函数依赖集
 F={A→BC , BC→A , BCD→EF , E→C}, 
求 R 的候选码。

(1) L=(D), R=(F), LR=(A , B , C , E ), N=空;
(2) L∪N=(D) , D+=D;
(3)因为 (DA)+=DABCEF=U, (DB)+=DB ,(DC)+=DC, (DE)+=DEC, 所以 DA 是候选码;
(4)因为 (DBC)+=DBCAEF=U, (DBE)+=DBECAF=U, (DCE)+=DCE, 所以DBC、DBE 是候选码;
(5) U 的候选码有 DA、DBC、DBE

这是一个比较特殊的情况,,之所以这里推完两个的候选码 还有继续推下去
是因为存在A←→BC这一层关系 所以在存在等价关系的时候我觉得应该要有这样的操作。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值