关系模式Student(Sno,Sname,Cno,Cname,Grade,Tname,Taddr)的属性分别表示学号、学生姓名、课程号、课程名、成绩、任课教师名和教师地址。其中,一个学生可以选若干门课程,一个教师可以讲授若干门课程,一门课程可以由多个教师

admin2019-04-08  30

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

选项 A、{(Sno, Sname, Cno, Tname, Taddr),(Sno, Sname, Cno, Cname, Grade) } ∈ 2NF
B、{(Sno, Shame),(Sno, Cno, Grade, Tname, Taddr),(Cno, Cname)}∈ 2NF
C、{(Sno, Sname),(Sno, Cno, Grade),(Tname, Taddr),(Cno, Cname) } ∈ 3NF
D、{(Sno, Sname),(Sno, Cno, Grade),(Tname, Taddr),(Tname, Cno),(Cno, Cname)}∈3NF

答案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所示。

根据Tname→Taddr,因为在Tname列中没有两行相等,所以不需要修改;根据Sno→Sname,因为Sno列的第一行和第二行相等,可使b22=a2;根据Cno→Cname,因为Cno列的第二行和第四行相等,可使b24=a4。根据(Sno,Cno)→(Grade,Tname),因为在Sno和Cno列中没有相等的两行,所以也不要修改。修改后的结果如表8-2所示。

表8-2的第二行完全是a的形式,所以分解B是无损连接分解。显然,B也保持了所有函数依赖,且B的三个子模式都不存在部分依赖情况,所以,都是2NF。
转载请注明原文地址:https://jikaoti.com/ti/qEJ7FFFM
0

最新回复(0)