1.5 课堂案例:学生成绩管理数据库设计
下面以学生成绩管理数据库为例,按照Access数据库设计的一般步骤逐步完成对数据库的设计。
1.需求分析
某高校的在校学生有2万名左右,每个学生在校期间要修几十门课程,与学生相关的数据量非常大,特别是学生毕业时需要取成绩单的时候,如果由教务工作人员人工去查学生的学籍表,再为每个学生抄填成绩单,工作量是巨大的。因此,有必要建立学生成绩管理数据库系统,以实现学生成绩管理方面的计算机信息化。
学生成绩管理数据库系统的主要任务之一就是能够打印出学生的成绩单,所以成绩单中包括的各项数据(如学号、姓名、班级、院系名称、每门课程的名称、学分、成绩、学年、学期等)都必须能够从学生成绩管理数据库中获得。
2.确定数据库需要建立的表和各表包含的字段及主键
(1)绘制E-R图。根据需求分析,学生成绩管理数据库中包括院系、课程和学生3个实体。各个实体及其属性、实体之间的联系用E-R图进行描述,如图1-13~图1-16所示。一个院系可以有多个学生,所以院系与学生之间是一对多的联系(1︰n);一个学生可以选修多门课程,而一门课程也可以被多个学生选修,所以学生和课程之间是多对多的联系(m︰n)。
图1-13 院系实体及其属性的E-R图
图1-14 课程实体及其属性的E-R图
图1-15 学生实体及其属性的E-R图
图1-16 各实体之间的联系的E-R图
(2)将E-R图转换为关系模式。对于Access数据库来说,关系就是二维表格,关系模式也就是表模式。因此,学生成绩管理数据库有关的实体及实体之间的联系可表示为以下4张表。
① 院系实体转换为院系代码表,表模式为:院系代码表(院系代码,院系名称,院系网址),主键是“院系代码”字段。
② 学生实体转换为学生表,表模式为:学生表(学号,姓名,性别,出生日期,班级,院系代码,入学总分,奖惩情况,照片),主键是“学号”字段,外键是“院系代码”字段。
③ 课程实体转换为课程表,表模式为:课程表(课程编号,课程名称,学分,开课状态,课程大纲),主键是“课程编号”字段。
④ 学生实体与课程实体之间的多对多联系转换为选课成绩表,表模式为:选课成绩表(学号,课程编号,成绩,学年,学期),主键是“学号+课程编号”字段,同时“学号”字段和“课程编号”字段分别是两个外键。
3.确定表之间的联系
根据图1-16所示的各实体之间的联系的E-R图,可以确定4张表之间的联系。
(1)院系代码表与学生表之间是一对多联系,即一个院系可以有多个学生,而一个学生只能属于一个院系。两张表之间通过“院系代码”字段进行关联。
(2)学生表与选课成绩表之间是一对多联系,即一个学生可以有多门课程的成绩,而选课成绩表中的每一个成绩都只能是某一个学生的。两张表之间通过“学号”字段进行关联。
(3)课程表与选课成绩表之间是一对多联系,即一门课程可以有多个学生的成绩,而选课成绩表中每一个学生该门课程只能有一个成绩。两张表之间通过“课程编号”字段进行关联。
4.优化设计
应用规范化理论对表模式进行检查,从1NF开始,逐步进行规范化检验。由于每张表中所有属性都是不可再分割的数据项,因此符合1NF。由于每张表中所有属性都完全依赖主键,因此符合2NF。由于每张表中都不存在任何非主属性对主属性的传递函数依赖,因此符合3NF。
综上所述,这4张表的设计符合规范化要求。