单选题 关系模式Student(Sno,Sname,Cno,Cname,Grade,Tname,Taddr)的属性分别表示学号、学生姓名、课程号、课程名、成绩、任课教师名和教师地址。其中,一个学生可以选若干门课程,一个教师可以讲授若干门课程,一门课程可以由多个教师讲授,对于同一门课程,学生只能选定一个教师讲授的课程,教师不会重名。关系模式Student的候选关键字有 (36) ,最小函数依赖集中有 (37) 个函数依赖,该关系模式属于 (38) 范式,分解p= (39) ,并且是无损连接及保持函数依赖。

【正确答案】 A
【答案解析】
【正确答案】 B
【答案解析】
【正确答案】 A
【答案解析】
【正确答案】 B
【答案解析】[分析] 在关系模式Student(Sno,Sname,Cno,Cname,Grade,Tname,Taddr)中,根据试题要求,有下列函数依赖成立:Tname→Taddr,Sno→Sname, Cno→Cname,(Sno,Cno)→Grade,(Sno,Cno)→Tname,同时,这也是最小函数依赖集。所以,该关系模式的关键字为(Sno,Cno)。在该关系模式中,显然存在部分依赖现象,因此至多是1NF。
分解该关系模式后,在给定的4个选项中,显然,A中存在部分依赖,不是2NF,所以不是正确答案。下面我们分析选项B,先学习无损连接分解的判别方法。
设关系模式R=A1…An,R上成立的FD集F,R的一个分解p={R1,…, Rk}。无损连接分解的判断方法如下:
(1)构造一张k行n列的表格,每列对应一个属性Aj(1≤j≤n),每行对应一个模式Ri(1≤i《k)。如果Aj在Ri中,那么在表格的第i行第j列处填上符号 aj,否则填上符号bij
(2)把表格看成模式R的一个关系,反复检查F中每个FD在表格中是否成立,若不成立,则修改表格中元素。修改方法如下:对于F中一个FDX→Y,如果表格中有两行在x分量上相等,在Y分量上不相等,那么把这两行在Y分量上改成相等。如果Y的分量中有一个是aj,那么另一个也改成aj;如果没有aj,那么用其中的一个bij替换另一个(尽量把下标ij改成较小的数)。一直到表格不能修改为止。
(3)若修改的最后一张表格中有一行全是a,即a1a2…an,那么p相对于F是无损连接分解,否则是损失连接分解。 根据上述判断方法,我们列出选项B的初始表如表8-1所示。
表8-1 选项B的初始表
Sno
Sname
Cno
Cname
Grade
Tname
Taddr
(Sno,Sname)
a1
a2
b13
b14
b15
b16
b17
(Sno,Cno,Grade,Tname,Taddr)
a1
b22
a3
b24
a5
a6
a7
(Cno,Cname)
b31
b32
a3
a4
b35
b36
b37
根据Tname→Taddr,因为在Tname列中没有两行相等,所以不需要修改;根据Sno→Sname,因为Sno列的第一行和第二行相等,可使b22=a2;根据Cno→Cname,因为Cno列的第二行和第四行相等,可使b24=a4。根据(Sno,Cno)→(Grade,Tname),因为在Sno和Cno列中没有相等的两行,所以也不要修改。修改后的结果如表8-2所示。
                                表8-2选项B的最后结果
Sno
Sname
Cno
Cname
Grade
Tname
Taddr
(Sno,Sname)
a1
a2
b13
b14
b15
b16
b17
(Sno,Cno,Grade,name,Taddr)
a1
a2
a3
a4
a5
a6
a7
(Cno,Cname)
b31
b32
a3
a4
b35
b36
b37
表8-2的第二行完全是a的形式,所以分解B是无损连接分解。显然,B也保持了所有函数依赖,且B的三个子模式都不存在部分依赖情况,所以,都是2NF。