专业每年只招一个班,每个班有若干个学生,一个系的学生住在同一宿舍区,每个学生可以参加若干个社团,每个社团有若干学生。
描述学生的属性有:学号、姓名、出生年月、系名、班级号、宿舍区。 描述班级的属性有:班级号、专业名、系名、人数、入校年份。 描述系的属性有:系名、系号、系办公地点、人数。
描述社团的属性有:社团名、成立年份、地点、人数、学生参加某社团的年份。
请给出关系模式,写出每个关系模式的最小函数依赖集,指出是否存在传递函数依赖,对于函数依赖左部是多属性的情况,讨论函数依赖是完全函数依赖还是部分函数依赖。指出各关系的候选键、外部键,有没有全键存在?
各关系模式如下:
学生(学号,姓名,出生年月,系名,班级号,宿舍区) 班级(班级号,专业名,系名,人数,入校年份) 系(系名,系号,系办公地点,人数) 社团(社团名,成立年份,地点,人数)
加入社团(社团名,学号,学生参加社团的年份)
学生(学号,姓名,出生年月,系名,班级号,宿舍区)
●“学生”关系的最小函数依赖集为:
Fmin={学号→姓名,学号→班级号,学号→出生年月,学号→系名,系名→宿舍区} ●以上关系模式中存在传递函数依赖,如:学号→系名,系名→宿舍区 ●候选键是学号,外部键是班级号,系名。
notice: 在关系模式中,如果Y→X,X→A,且XY(X不决定Y), A不属于X,那么称Y→A是传递依赖。
班级(班级号,专业名,系名,人数,入校年份)
●“班级”关系的最小函数依赖集为:
Fmin={(系名,专业名)→班级号,班级号→人数,班级号→入校年份,班级号→系名,班级号→专业名}
(假设没有相同的系,不同系中专业名可以相同) ●以上关系模式中不存在传递函数依赖。
●“(系名,专业名)→班级号”是完全函数依赖。 ●候选键是(系名,专业名),班级号,外部键是系名。
系(系名,系号,系办公地点,人数)
●“系”关系的最小函数依赖集为: Fmin={系号→系名,系名→系办公地点,系名→人数,系名→系号}
●以上关系模式中不存在传递函数依赖 ●候选键是系名,系号
社团(社团名,成立年份,地点,人数)
●“社团”关系的最小函数依赖集为: Fmin={社团名→成立年份,社团名→地点,社团名→人数)
●以上关系模式中不存在传递函数依赖。 ●候选键是社团名
加入社团(社团名,学号,学生参加社团的年份)
●“加入社团”关系的最小函数依赖集为: Fmin={(社团名,学号)→学生参加社团的年份) ●“(社团名,学号)→学生参加社团的年份”是完全函数依赖。
●以上关系模式中不存在传递函数依赖。 ●候选键是(社团名,学号)。
4.4 对函数依赖X→Y的定义加以扩充,X和Y可以为空属性集,用φ表示,那么X→φ,φ→Y,φ→φ的含义是什么?
根据函数依赖的定义,以上三个表达式的含义为:
(1)一个关系模式R(U)中,X,Y是U的子集,r是R的任一具体关系,如果对r的任意两个元组t1,t2, 由t1[X]=t2[X]必有t1[φ]=t2[φ]。即X→φ表示空属性函数依赖于X。这是任何关系中都存在的。
(2)φ→Y表示Y函数依赖于空属性。由此可知该关系中所有元组中Y属性的值均相同。 (3)φ→φ表示空属性函数依赖于空属性。这也是任何关系中都存在的。
4.5 已知关系模式R(ABC),F={A→C,B→C},求F+。
可以直接通过自反律、增广律、传递律加以推广:
F+={φ→φ,A→φ,B→φ,C→φ,A→C,B→C,AB→φ,AB→A,AB→B,AB→C,AB→BC,AB→AB,AB→ABC,BC→φ,BC→C,BC→B,BC→BC,AC→φ,AC→C,AC→A,AC→AC,ABC→φ,ABC→A,ABC→B,ABC→C,ABC→BC,ABC→AB,ABC→ABC}
4.6 试分析下列分解是否具有无损联接和保持函数依赖的特点: (1)设R(ABC),F1={A→B} 在R上成立,ρ1={AB,AC}。
首先,检查是否具有无损联接特点: 第1种解法--算法4.2:
A B C AB a1 a2 b13 AC a1 b22 a3 A B C a1 a2 b13 a1 a2 a3
(1) 构造表
(2)根据A→B进行处理
结果第二行全是a行,因此分解是无损联接分解。
第2种解法:(定理4.8) 设 R1=AB,R2=AC R1∩R2=A R2- R1=B
∵A→B,∴该分解是无损联接分解。
然后,检查分解是否保持函数依赖
πR1(F1)={A→B,以及按自反率推出的一些函数依赖}
πR2(F1)={按自反率推出的一些函数依赖}
F1被πR1(F1)所蕴涵,∴所以该分解保持函数依赖。
(2)设R(ABC),F2={A→C,B→C}在R上成立,ρ2={AB,AC}
首先,检查是否具有无损联接特点: 第1种解法(略) 第2种解法:(定理4.8) 设 R1=AB,R2=AC R1∩R2=A R2- R1=C
∵A→C,∴该分解是无损联接分解。
然后,检查分解是否保持函数依赖
πR1(F2)={按自反率推出的一些函数依赖}
πR2(F2)={A→C,以及按自反率推出的一些函数依赖}
∵F1中的B→C没有被蕴涵,所以该分解没有保持函数依赖。
(3)设R(ABC),F3={A→B},在R上成立,ρ3={AB,BC}.
首先,检查是否具有无损联接特点: 第1种解法: A B C AB a1 a2 b13 BC b21 a2 a3 A B C a1
a2 a3 a1 b22 a3
(1) 构造表
(2)根据A→B进行处理
没有一行全是a行。因此这个分解不具有无损联接特性。
第2种解法:(定理4.8) 设 R1=AB,R2=BC R1∩R2=B
R2- R1=C,R1- R2=A
∵B→C,B→A不在F3中∴该分解不具有无损联接特性。
然后,检查分解是否保持函数依赖
πR1(F3)={A→B,以及按自反率推出的一些函数依赖} πR2(F3)={按自反率推出的一些函数依赖}
F1被πR1(F3)所蕴涵,所以该分解保持函数依赖。 (4)设R(ABC),F4={A→B,B→C}在R上成立,ρ4={AC,BC}
首先,检查是否具有无损联接特点: 第1种解法(略)
第2种解法:(定理4.8)
设 R1=AC,R2=BC R1(AC)∩R2(BC)=C R2- R1=B,R1- R2=A
∵C→B,C→A不在F4中∴该分解不具有无损联接特性。
然后,检查分解是否保持函数依赖
πR1(F2)={按自反率推出的一些函数依赖}
πR2(F2)={B→C,以及按自反率推出的一些函数依赖}
∵F1中的A→B没有被蕴涵,所以该分解没有保持函数依赖。
4.7 设R=ABCD,R上的函数依赖集F={A→B,B→C,A→D,D→C},R的一个分解ρ={AB,AC,AD},求:(1)F在ρ的每个模式上的投影。(2)ρ相对于F是无损联接分解吗?(3)ρ保持依赖吗? (1)