CNO-的结构式是[-O=C=N:]-其中OCN-中,C为中心原子,C与N以叁键相连,与O则以单键相连,氧得到一个电子。
B
根据以上的定义,(sno,cno)是表的主键,而sdept只依靠sno就可以确定,因此不满足2NF,也就不满足3NF了。为了满足题意,所以不能直接修改成3NF,所以做以下的修改满足2NF:
S-L(SNO,Sdept,Sloc) S-C(SNO,Cno,G)
这样SNO是S-L主键,Sdept,Sloc唯一依赖SNO,而(SNO,CNO)是S-C主键,G唯一依赖(SNO,CNO)。
但是,Sloc可由Sdept唯一确定,所以这个解其实不满足3NF。
做以下的修改转换为3NF。
S-D(SNO, Sdept) D-L(Sdept,Sloc),S-C(SNO,CNO,G)
问题解决了。
这种问题你就明确的记住2NF和3NF的规则,然后就把每个表的主键弄出来,把非主键和其他字段进行比较,判断是否唯一由全部主键确定就好。
楼上的回答不对。“包含在任何一个候选码中的属性称为主属性”可以这么理解:
如果一张表中有多个候选码,那么任意一个候选码或者几个候选码的组合都可以作为主键。
你的例子中说了:(sno,cno)组成候选码。那么,既然这张表只有一个候选码,那么主键只能是:(sno,cno),而不能是单个的sno或cno。
用一个反例来说明,如果你选择了sno作为主键,那么下面的数据存储就会报错:
20110001 001 87
20110001 00292
但是,设计时显然你要求的是能够存储,因为上述代表一个学生两门不同课程的成绩。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)