关系模式及函数依赖,答对追加50分
发布网友
发布时间:2022-04-26 17:57
我来回答
共1个回答
热心网友
时间:2023-10-19 12:42
图贴不上来,给你一个网址,上面是这一题原题的解答.
网址:http://lwh.yangtzeu.e.cn/lwhStudy/ktjx/chapter05/5.2.5.htm
举例:一个不是2NF的例子。
关系模式 S-L-C(Sno,Sdept,Sloc,Cno,Grade),其中Sloc为学生的住处,并且每个系的学生住在同一个地方。这里码为(Sno,Cno)。函数依赖有。
(Sno,Cno) Grade
Sno→Sdept,(Sno,Cno) Sdept
Sno→Sloc,(Sno,Cno) Sloc
Sdept→Sloc
其依赖关系可见图5.5,图中实线表示完全函数依赖,虚线表示部分函数依赖。
图5.5 关系模式S-L-C的函数依赖
从上面列出的依赖关系可以看出:非主属性Grade完全依赖于码(Sno,Cno),而非主属性Sdept、Sloc只是部分依赖于码(Sno,Cno)。因此,S-L-C(Sno,Sdept,Sloc,Cno,Grade)不符合2NF的定义,即:S-L-C 2NF。
三、非2NF关系模式的问题
如果一个关系模式R不属于2NF,就会产生以下问题:
① 插入异常
假如要插入一个学生Sno='95010'、Sdept='MA'、Sloc='12-1',该元组不能插入。因为该学生无Cno,而插入元组时必须给定码值。
② 删除异常
假如某个学生只选一门课,如:95003学生只选了一门5号课,现在他不选了,希望该选课。而Cno是主属性,删除了5号课,整个元组都必须删除,从而造成删除异常,即不应该删除的信息也删除了。
③ 修改复杂
如某个学生从数学系(MA)转到计算机科学系(CS),这本来只需修改此学生元组中的Sdept分量。但由于关系模式S-L-C中还含有系的住处Sloc属性,学生转系将同时改变住处,因而还必须修改元组中的Sloc分量。另外,如果这个学生选修了k门课,Sdept、Sloc重复存储了k次,不仅存储冗余度大,而且必须无遗漏地修改k个元组中全部Sdept、Sloc信息,造成修改的复杂化。
四、非2NF关系模式的转换
分析上面的例子,可以发现问题在于有两种非主属性。一种如Grade,它对码是完全函数依赖。另一种如Sdept、Sloc对码不是完全函数依赖。解决的办法是用投影分解把关系模式S-L-C分解为两个关系模式。
SC(Sno,Cno,Grade)
S-L(Sno,Sdept,Sloc)
关系模式SC与S-L中属性间的函数依赖可以用图5.6和图5.7来表示。
图5.6 SC中的函数依赖 图5.7 S-L中的函数依赖
关系模式SC的码为(Sno,Cno),关系模式S-L的码为Sno,这样就使得非主属性对码都是完全函数依赖了。即:
(Sno,Cno) Grade
(Sno) Sdept
(Sno) Sloc