定义学生、教师和课程的关系模式STC(SNO,SN,SA,TN,CN,G),其中的六个属性分别为学生的学号、姓名、年龄、教师的姓名、课程名以及学生的成绩,则该关系为()。
A.第一范式 B.第二范式 C.第三范式 D. BCNF范式
1. 首先确认主键
(1)什么是主键:表中的一个或多个字段(主键可以包含多个字段),用于唯一的标识表中的某一条记录,是用户选择的候选键。一个数据列只能有一个主键,且主键的取值不能缺失,即不能为空值(Null)。
(2)超键和候选键:超键泛指所有可以用于唯一的标识表中的某一条记录的一个或多个字段,候选键是特殊的超键——由一组字段组成的超键如果减少了某些字段仍是超键,那就不是候选键,即候选键是能实现唯一标识的最小组合,也即它里面的属性一旦去掉任何一个,它就不是超键。
(3)小结一下:要成为主键,首先得起到能唯一标识的作用,这样你就成为了超键;例如此处的{sno,tn},{sno,cn},{sno,sn,tn}…{sno,sn,cn,tn}…(规律是必须包含【学号或姓名】+【教师名或课程名】)就属于超键,例如{sa},{sa,g}就不是超键。其次你还得精简化,如果你抛弃了你的某些组成部分你还是超键,你就不够精简化;例如{sno,sn,cn,tn}、{sno,sn,tn}、{sno,sn,cn}还可以简化成是超键的{sno,tn},{sno,cn}。最终,用户将可以从四个候选键中选取主键,候选键分别是{sno,tn},{sno,cn},{sn,tn},{sn,cn}。
2. 六种范式要求
第一范式(1NF):数据库表的每一列都是不可分割的,或者说成“字段不可再分”。
第二范式(2NF):在1NF的基础上,消除非主属性对主属性的部分依赖(主键可能由多个字段组成,非码属性必须完全依赖于候选码(在1NF基础上消除非主属性对主码的部分函数依赖),第二范式(2NF)要求实体的属性完全依赖于主关键字。所谓完全依赖是指不能存在仅依赖主关键字一部分的属性。
第三范式(3NF):在2NF基础上,任何非主属性不依赖于其它非主属性,如果依赖于其他非主属性(非主属性对主属性是存在于依赖的),该字段对主属性就是传递依赖。满足3NF也就是在2NF基础上消除传递依赖。
巴斯-科德范式(BCNF):在3NF基础上,任何非主属性不能对主键子集依赖(在3NF基础上消除对主码子集的依赖)
那么上面这道题的判断过程如下:
- 在我们最开始的例子中,主键可以是{sno,tn},{sno,cn},{sn,tn},{sn,cn}中的任何一个。首先我们能判断关系表中每一个字段都是不可再分的,即不会有一个字段中既包含性别信息又包含年龄信息比如说“18岁男生”,所以满足1NF。
- 若主键包含字段sno(student number),则学生姓名、年龄只依赖于sno而不依赖于tn或者cn;同理,若主字段包含sn,则sno、sa也会部分依赖主键;主键包含tn/cn时,cn/tn都会对主键产生部份依赖,所以说本关系模式不满足2nf范式的要求,也就不会满足其他范式的要求了。
综上所述,应当选择A选项。