1. 设有关系模式:学生修课(学号,姓名,所在系,性别,课程号,课程名,学分,成绩)。设一个学生可以选多门课程,一门课程可以被多名学生选。一个学生有唯一的所在系,每门课程有唯一的课程名和学分。每个学生对每门课程有唯一的成绩。
(1) 请指出此关系模式的候选码。
(2) 写出该关系模式的极小函数依赖集。
(3) 该关系模式属于第几范式?并简单说明理由。
(4) 若不是第三范式的,请将其规范化为第三范式关系模式,并指出分解后的每个关系模式的主码和外码。
答:(1)候选码:(学号,课程号)
(2)学号→姓名,学号→所在系,学号→性别,课程号→课程名,课程号→学分,
(学号,课程号)→成绩
(3)属于第二范式,因为存在部分函数依赖:
为什么属于第二范式?他有部分函数依赖,2NF不是消除了非主属性对主属性的部分函数依赖吗?学号→姓名这不是部分函数依赖吗?
对于2NF,关系模式中的非主属性必须完全函数依赖于主键。在此关系模式中,学号是主键,但是存在非主属性部分函数依赖的情况,如学号→姓名,因此不满足2NF。但是,2NF并不要求消除所有的部分函数依赖,而是要求消除非主属性对主键的部分函数依赖。因此,该关系模式仍然属于2NF。
因此,需要将关系模式进行规范化,将非主属性部分函数依赖于主键的属性拆分出来,得到以下两个关系模式:
学生(学号, 姓名, 所在系, 性别)
课程(课程号, 课程名, 学分)
学生选课(学号, 课程号, 成绩)
其中,学生和课程是主键,学生选课中的主键是(学号,课程号),学号和课程号分别是学生选课和学生、课程之间的外键。
该回答引用chatgpt:
您提出的疑问很好。确实,学号→姓名是一个部分函数依赖,但这并不妨碍该关系模式属于第二范式。
第二范式要求关系模式中的所有非主属性都完全依赖于候选码,而不是部分依赖。在这个例子中,候选码是(学号,课程号),所有的属性都完全依赖于候选码,因为每个学生对每门课程都有唯一的成绩。因此,该关系模式满足第二范式的要求。
需要注意的是,虽然学号→姓名是一个部分函数依赖,但它并不违反第二范式的要求。在这个例子中,学号→姓名是通过候选码(学号,课程号)的传递依赖得到的,因为课程号是学生修课表中的一个属性,而且课程号唯一对应一个课程名和学分。因此,学号→课程号→姓名是一个传递依赖,而这个依赖是允许的,并且不违反第二范式的要求。
哈喽,根据你的理解基本正确,我来进一步解释与补充: