1.28k likes | 1.41k Views
第 4 章 关系数据库理论 数据库模式 : 一组相关的关系模式 关系模式 R(A 1 ,A 2 ,…,A n ). 4.1 函数依赖 4.1.1 函数依赖的基本概念 一、关系模式的优劣与数据依赖 1. 关系模式集性能比较. 例 1 :学生数据库 方案 1 :各类数据放在一个关系模式中 Students(Sno,Sname,Cno,Grade,Sdept,Sloc) 键 (Sno , Cno). 问题: ①冗余: 一个学生选 20 门课 学生 系 宿舍区的信息 重复存储.
E N D
第4章 关系数据库理论 数据库模式: 一组相关的关系模式 关系模式 R(A1,A2,…,An)
4.1 函数依赖 4.1.1 函数依赖的基本概念 一、关系模式的优劣与数据依赖 1.关系模式集性能比较
例1:学生数据库 方案1:各类数据放在一个关系模式中 Students(Sno,Sname,Cno,Grade,Sdept,Sloc) 键 (Sno,Cno)
问题: ①冗余: 一个学生选20门课 学生 系 宿舍区的信息 重复存储
②潜在不一致(修改复杂) 学生改名 对于所选的若干门课 若干行 到处修改 潜在的不一致 修改复杂
③插、删异常 没选课 Cno为NULL学生信息无法插入 选课信息输入错误 删除 同时删学生信息
方案2:选课信息单独存放 Students(Sno,Sname,Sdept,Sloc) 键: Sno SC(Sno,Cno,Grade) 键: (Sno,Cno) 有所改进: 与选课无关的信息只存一次
仍有问题: 1.冗余 系与宿舍区的对应关系 一个系1000个学生 系与宿舍区的对应关系存放1000次
2.潜在不一致 系换宿舍区 到处修改 潜在的不一致 修改1000次 复杂
3.删插异常 有相应学生的信息 才能插入系以及宿舍区的信息 学生全部毕业 系与宿舍区的联系同时删除
2.产生冗余及更新异常的原因 关系模式内部属性值之间的内在联系 ——数据依赖 主要的数据依赖: 函数依赖、多值依赖
Sname Sno Sdept 键 Cno Sloc Grade 一个Sno,m个Cno m行学生信息 一个系1000个Sno,1000行 系与宿舍区的n:1联系
3.关于数据依赖 属性值之间相关联系的表达 语义的体现 构成数据的约束 大多数数据依赖是函数依赖
二、函数依赖的定义 1.函数依赖 设 R(U)是一个关系模式,U 是关系 R 的属性全集; X,Y是R 的属性组(X,Y U); 若对于R上任意一个可能的关系实例 r 满足: t1,t2∈r ,t1[X]=t2[X] 则 t1[Y]=t2[Y] 则称“X 函数决定 Y”或“Y 函数依赖于 X” 记为:X YX 称为决定因素 对关系模式
函数依赖 X Y 的含义为: 任何时刻表中任一元组: 属性组X上的值(a1 a2 ...an) 唯一地决定 在属性组Y上的值 (b1 b2 ...bm)
R(A,B,C,D) 一个实例: A B C D t1 a1 b1 c1 d1 t2 a2b2c2d2 t3 a2b2 c2 d3 t4 a3b2c2 d4? 元组t2,t3 A的取值相同 B,C的取值相同 实例判定函数依赖?
若 对于任何时刻(任意实例)有 A的取值相同时 B,C上的取值相同 则 A (B,C)
函数依赖的例: 例 Movies(title,year ,length, genre, studioName,starName) (title,year)length ? 决定 ? (title,year)genre ? 函数依赖 ? (title,year) studioName 即 (title,year)(length, genre, studioName) 关系实例 P38 图3-2 1-3行 5-6行
例: Students(Sno,Sname,Sage,Class_no,Sdept) 此关系模式上有许多函数依赖 如: Sno (Sname,Sage,Class_no,Sdept) Class_no Sdept (Sno,Sname)(Sage,Class_no ) ……
2.平凡函数依赖 如果函数依赖X Y,Y X; 则称为平凡函数依赖 否则称为非平凡的函数依赖 例:(Sno,Sname) Sname 平凡函数依赖 (Sno,Cno) Cno 平凡函数依赖 Sno Sname非平凡的函数依赖
所有平凡的函数依赖保持“恒真” 通常我们讨论的都是非平凡的函数依赖 包含平凡的函数依赖有时简化规则的陈述 A1A2…An B1B2…Bm 平凡: B1B2…Bm是A1A2…An子集 非平凡:每一个Bi不是A1A2…An子集 (通常讨论)
4.1.2 函数依赖与键 设 R(U)是一个关系模式,U 是关系 R 的属性全集;X是R 的属性组(X U); 若X U ,且不存在 X’ X ,X’ U 则称X为R的键(候选键)。 X 能决定所有属性 X 中属性缺一则不可决定所有属性
键举例: 例 Movies(title,year,length,genre, studioName, StarName) 影片 影星 键 : (title,year , StarName) 能决定所有属性 三个属性缺一不可 所以 是 键
例: Students(Sno,Sname,Sage,Class_no,Sdept) 键 Sno (Sno,Sname ) 是 超键 不是键 真子集Sno可以决定所有属性
设 R(U)是一个关系模式,U 是关系 R 的属性全集;X是R 的属性组(X U); 若X U ,则称X为R的超键。 与键比较
超键举例: Students(Sno, Sname, sage, Class_no, Sdept) 超键有: Sno (Sno,Sname) (Sno,Class_no) (Sno, Sname,Sage, Class_no, Sdept) …
4.1.3 函数依赖的规则 P40 如何推导函数依赖 已知某关系所满足的函数依赖,推出它满足的另一些函数依赖。 例 3.4 R(A,B,C) 由A B, B C 推导 A C 思路:考察R的任意两个A上取值相同的元组 看看C上取值是否相同
假设 这样的两个元组为 (a,b1,c1 ) (a,b2,c2) 由 A B A上值相同则B上值相同 有b1=b2记为 b 得到 (a,b,c1 ) (a,b,c2) 由B C B上值相同则C上值相同 有 c1=c2 即C上取值相同 所以 A上取值相同的元组 C上取值相同 所以A C
函数依赖集S 蕴涵于 函数依赖集T: 满足T中函数依赖 的关系实例 也满足S中函数依赖 R(A,B,C) T:{A B, B C } S{A B, B C ,A C}
函数依赖集等价: 函数依赖集S蕴涵于函数依赖集T 函数依赖集T蕴涵于函数依赖集S S与T是等价的
P40 分解规则: A1A2…An B1B2…..Bm 则A1A2…An Bi i=1,…m 例: (title,year,length,genre) (title,year) (length,genre) 则 (title,year) length (title,year) genre
合并规则: P40 组合/结合 A1A2…An Bi i=1,…m 则A1A2…An B1B2…..Bm 例: (title,year,length,genre) (title,year) length (title,year) genre 则 (title,year) (length,genre)
P42 平凡依赖规则: A1A2…An B1B2…..Bm 等价于A1A2…An C1C2…..Ck 去掉A中出现的属性 非平凡 例: (title,year) (studioName,year) (title,year) (studioName)
**属性集的闭包 函数依赖集F 属性组X 若有属性组Y 包含所有满足下述条件的属性A X A 蕴涵于F中的函数依赖 称Y为属性组X对于函数依赖集F的闭包, 记为XF+
P43 例3.8: R(A,B,C,D,E,G) F={AB C , BC AD, D E, CG B} {A,B}+={A,B,C,D,E} F
闭包与键 例: R(A,B,C,D) F={A D, BC A} {B,C}+={A,B,C,D} 决定属性全集 B +={B} C +={C} 最小性 BC 是键 F F F
求键时的一些考虑: 1.一个属性不在函数依赖右边出现,则一定是键属性 2.此外,考虑含函数依赖左边属性的属性集的闭包(不含不在左边、在右边的属性) 3.不必考虑以键作为真子集的属性集的闭包 4.不必考虑属性全集的闭包(全键情况除外)
例: R(A,B,C,D) F={A C, C B,B A} 求所有键 分析:键中必含D 键属性涉及左边的A,B,C 解: {A,D}+ ={A,C,B,D} {B,D}+ ={B,A,C,D} {C,D}+ ={C,B,A,D} D不是键,不含D的属性组也不能作键 {A,D}{B,D}{C,D}为键 不必考虑以上述键作为真子集的属性组 这是所有的键 F F F
定理: 当且仅当 Bi在A+中 i=1..m A B1B2…..Bm 蕴涵于 函数依赖集F F
定理的例: 例: R(A,B,C,D,E,G) F={AB C, BC AD, D E, CG B} 1) AB D是否蕴涵于上述函数依赖? {A,B}+={A,B,C,D,E} AB D蕴涵于... 2) D A是否蕴涵于上述函数依赖? { D}+={DE} D A不蕴涵于... F F
传递规则: A1A2…An B1B2…..Bm B1B2…..Bm C1C2…..Ck 则 A1A2…An C1C2…..Ck
P44 例3.10 Movies(title,year,length,genre, studioName, StudioAddr) (title,year) studioName studioName StudioAddr (title,year) StudioAddr
**函数依赖集的闭包: 由给定的函数依赖集推导出的所有函数依赖的集合 **对于关系模式: 能导出关系模式的所有函数依赖的给定的函数依赖集,称为“基本集” , 如果基本集的任何真子集不能导出关系上的所有依赖,此基本集为最小的. 最小基本集又称为极小的函数依赖集 等价
极小的函数依赖集 (1)F中任一函数依赖的右部仅含一个属性 (2)F中没有多余的函数依赖 即:不存在这样的函数依赖X A 使F 与 F-{X A} 等价 (3)F中每个函数依赖的左部都没有多余的属性 即:不存在这样的函数依赖X A, 对于X的真子集Z 使F 与 F-{X A} ∪ZA 等价
计算极小函数依赖集的算法: (1)应用分解规则,使F中每一个函数依赖的 右部属性单一化 (2)去掉各函数依赖左部多余的属性 (3)去掉多余的函数依赖 例:F={A BC,B C,AB C} (1) F1=F= {A B, A C, B C,AB C} (2)F2=F1= {A B, A C, B C,A C} ={A B, A C, B C} (3)F3=F2={A B, B C} 极小集
A,B,C为属性组 Armstrong公理: 推导函数依赖的规则 自反律 B A 则 A B 增长律(增广律) A B 则任意C AC BC 传递律 A B B C 则 A C
4.2 关系数据库模式设计 4.2.1 有关函数依赖 完全函数依赖 设 R(U)是一个关系模式,U 是关系 R 的属性全集;X,Y是R 的属性组(X,Y U); 若X Y ,且不存在 X’ X ,X’ Y 则称 Y 完全函数依赖于 X ;记作: X Y 。 f
完全函数依赖含义: 元组在属性组Y上的值 依赖于 在属性组X中所有属性上的值。
部分函数依赖 设 R(U)是一个关系模式,U 是关系 R 的属性全集; X,Y是R 的属性组(X,Y U); 若X Y ,且存在X’ X ,X’ Y 则称 Y 部分函数依赖于 X ;记作: X Y 。 P
部分函数依赖含义: 元组在属性组Y的值, 只依赖于 属性组X的一部分属性的值。