题目
某高校需要为其学生信息管理系统[1]设计一个数据库。系统需要记录学生的基本信息、课程信息、选课信息以及成绩信息。以下是具体的需求:1. 学生信息包括学号、姓名、性别、年龄、专业和班级。2. 课程信息包括课程号、课程名称、学分和授课教师。3. 选课信息记录学生选课的情况,包括学号和课程号。4. 成绩信息记录学生的课程成绩,包括学号、课程号和成绩。根据以上需求回答以下问题:(1) 给出满足以上需求的数据库 ER 图,包括实体、属性和关系。(2) 将 ER 图转换[2]为关系模型,并给出每个表的结构和主外键关系。(3) 说明如何对该数据库进行规范化[3],以消除数据冗余[4]和更新异常。(4) 分别说明第一范式[5]、第二范式[6]和第三范式[7]在该数据库设计[8]中的应用。
某高校需要为其学生信息管理系统[1]设计一个数据库。系统需要记录学生的基本信息、课程信息、选课信息以及成绩信息。以下是具体的需求: 1. 学生信息包括学号、姓名、性别、年龄、专业和班级。 2. 课程信息包括课程号、课程名称、学分和授课教师。 3. 选课信息记录学生选课的情况,包括学号和课程号。 4. 成绩信息记录学生的课程成绩,包括学号、课程号和成绩。 根据以上需求回答以下问题: (1) 给出满足以上需求的数据库 ER 图,包括实体、属性和关系。 (2) 将 ER 图转换[2]为关系模型,并给出每个表的结构和主外键关系。 (3) 说明如何对该数据库进行规范化[3],以消除数据冗余[4]和更新异常。 (4) 分别说明第一范式[5]、第二范式[6]和第三范式[7]在该数据库设计[8]中的应用。
题目解答
答案
(1)数据库ER图如下:
- 实体:
- 学生(Student):学号(Sno)、姓名(Sname)、性别(Sex)、年龄(Age)、专业(Major)、班级(Class)。
- 课程(Course):课程号(Cno)、课程名称(Cname)、学分(Credit)、授课教师(Teacher)。
- 选课成绩(SelectionGrade):学号(Sno)、课程号(Cno)、成绩(Score)。
- 关系:
- 学生与选课成绩:一对多关系。
- 课程与选课成绩:一对多关系。
(2)关系模型如下:
- 学生表(Student):
- Sno(主键),Sname,Sex,Age,Major,Class。
- 课程表(Course):
- Cno(主键),Cname,Credit,Teacher。
- 选课成绩表(SelectionGrade):
- Sno(外键),Cno(外键),Score(主键为(Sno, Cno))。
(3)规范化过程:
- 1NF:所有属性均为原子属性,已满足。
- 2NF:所有非主属性[9]完全依赖于主键,已满足。
- 3NF:所有非主属性之间无传递依赖,已满足。
(4)范式应用:
- 1NF:确保属性原子性[10],避免数据冗余。
- 2NF:消除部分依赖,确保数据一致性[11]。
- 3NF:消除传递依赖,进一步减少冗余和异常。
最终设计满足3NF,保证数据完整性[12]和一致性。
解析
本题主要考查数据库设计中的 ER 图设计、关系模型转换、数据库规范化以及范式应用等知识。解题思路是先根据需求确定实体、属性和关系来绘制 ER 图,再将 ER 图转换为关系模型并明确主外键,接着分析数据库是否满足各范式以进行规范化,最后阐述各范式在该数据库设计中的具体应用。
(1)绘制数据库 ER 图
- 确定实体:根据需求可知,有三个实体,分别是“学生”“课程”和“选课成绩”。
- 确定属性:
- “学生”实体的属性有学号(Sno)、姓名(Sname)、性别(Sex)、年龄(Age)、专业(Major)、班级(Class)。
- “课程”实体的属性有课程号(Cno)、课程名称(Cname)、学分(Credit)、授课教师(Teacher)。
- “选课成绩”实体的属性有学号(Sno)、课程号(Cno)、成绩(Score)。
- 确定关系:
- 一个学生可以选多门课程,所以“学生”与“选课成绩”是一对多关系。
- 一门课程可以被多个学生选,所以“课程”与“选课成绩”是一对多关系。
(2)将 ER 图转换为关系模型
- 学生表(Student):
- 主键:学号(Sno),因为学号能唯一标识一个学生。
- 表结构:Sno,Sname,Sex,Age,Major,Class。
- 课程表(Course):
- 主键:课程号(Cno),因为课程号能唯一标识一门课程。
- 表结构:Cno,Cname,Credit,Teacher。
- 选课成绩表(SelectionGrade):
- 主键:(Sno,Cno),因为只有学号和课程号组合起来才能唯一标识一条选课成绩记录。
- 外键:Sno 引用学生表的 Sno,Cno 引用课程表的 Cno。
- 表结构:Sno,Cno,Score。
(3)对数据库进行规范化
- 第一范式(1NF):
- 第一范式要求所有属性均为原子属性,即每个属性都不可再分。在该数据库设计中,所有属性都是不可再分的基本数据项,所以满足第一范式。
- 第二范式(2NF):
- 第二范式要求所有非主属性完全依赖于主键。在学生表中,非主属性(Sname,Sex,Age,Major,Class)都完全依赖于主键 Sno;在课程表中,非主属性(Cname,Credit,Teacher)都完全依赖于主键 Cno;在选课成绩表中,非主属性 Score 完全依赖于主键(Sno,Cno)。所以满足第二范式。
- 第三范式(3NF):
- 第三范式要求所有非主属性之间无传递依赖。在该数据库设计中,不存在非主属性之间的传递依赖关系,所以满足第三范式。
(4)范式应用
- 第一范式(1NF):
- 确保属性原子性,避免数据冗余。例如,如果某个属性不是原子的,可能会导致重复存储相同的数据,而满足 1NF 可以避免这种情况。
- 第二范式(2NF):
- 消除部分依赖,确保数据一致性。在关系表中,如果存在部分依赖,可能会导致数据更新时出现不一致的情况,而满足 2NF 可以避免这种异常。
- 第三范式(3NF):
- 消除传递依赖,进一步减少冗余和异常。传递依赖可能会导致数据冗余和更新异常,满足 3NF 可以消除这些问题,保证数据的完整性和一致性。