任务1 设计数据库
任务描述
设计数据库是开发数据库应用系统过程中的一个关键步骤。换而言之合理的数据库设计对实现数据库的应用目标至关重要。通过合理设计数据库来建立业务模型,可以让用户访问最新的、最准确的信息。一旦实现数据库的应用后,再对数据库设计进行重新修改将会花费大量时间。在本任务中,将学习设计数据库的相关原则并对成绩管理数据库进行设计。例如,通过系统需求分析确定数据库中需要哪些表,每个表需要包含哪些字段,每个字段使用何种数据类型,在表中通过哪个字段来唯一地标识每一条记录,此外还将确定如何通过公共字段在表之间建立关系,最终获得一个既能满足实际需要,又能轻松适应变化的数据库。
实现步骤
1. 明确数据库的用途
在创建数据库前,通过与成绩管理人员交流,可以知道要开发的成绩管理系统应具有以下主要功能。
(1)系别信息管理:可以对系别基本信息进行添加、修改、删除和查询。
(2)教师信息管理:可以对教师基本信息进行添加、修改、删除和查询。
(3)班级信息管理:可以对班级信息进行添加、修改、删除和查询。
(4)课程信息管理:可以对课程信息进行添加、修改、删除和查询。
(5)授课信息管理:可以对教师的授课信息进行添加、修改、删除和查询。
(6)学生信息管理:可以对学生基本信息进行添加、修改、删除和查询。
(7)选课信息管理:可以对学生选课信息进行添加、修改、删除和查询。
(8)学生成绩管理:可以对学生成绩信息进行添加、修改、删除和查询。
2. 明确数据库中需要的表
在数据库设计过程中,收集希望在数据库中记录的各种信息(如学号、课程和成绩),将这些信息项划分到主要的实体或主题(如学生、课程和成绩)中,每个主题构成一个表。在成绩管理数据库中,涉及的主题主要包括系别教师、班级、学生、课程、授课、选课,以及成绩。这样,成绩管理数据库需要使用8个表来存储相关数据,即系别表、教师表、班级表、课程表、授课表、学生表、选课表及成绩表。
3. 明确表中需要的字段
确定了数据库中的表后,还需要确定在每个表中存储哪些信息,每个信息项将成为一个字段,并作为列显示在表中。例如,学生表中包含学号和姓名等字段。
确定每个表中需要哪些字段后,还需要进一步确定每个字段存储什么类型的数据,对于某些字段还要明确数据的长度。例如,“姓名”字段应该使用“文本”数据类型,且限定存储中文姓名,字段长度为4,“性别”字段也使用“文本”数据类型,但字段长度为1;“出生日期”、“入学时间”及“参加工作时间”等字段应该使用“日期/时间”数据类型;“成绩”字段应该使用“数字”数据类型;“照片”和“个人简历”应该使用“附件”数据类型。
下面列出成绩管理数据库中各个表包含的字段及其数据类型。
(1)系别表:系别编号(数字),系别名称(文本)。
(2)教师表:教师编号(数字),系别编号(数字),姓名(文本),性别(文本),出生日期(日期/时间),参加工作时间(日期/时间),政治面貌(文本),学历(文本),职称(文本),联系电话(文本),电子信箱(文本),个人简历(附件)。
(3)班级表:班级编号(文本),系别编号(数字),专业名称(文本)。
(4)课程表:课程编号(数字),课程名称(文本),课程类别(文本),课程性质(文本),考试类别(文本),学分(数字)。
(5)授课表:教师编号(数字),班级编号(文本),课程编号(数字),学年(文本),学期(数字),学时(数字)。
(6)学生表:学号(文本),班级编号(文本),姓名(文本),性别(文本),出生日期(日期/时间),是否团员(是/否),入学时间(日期/时间),入学成绩(数字),照片(附件),备注(文本)。
(7)选课表:ID(数字),学号(文本),课程编号(数字)。
(8)成绩表:学号(文本),课程编号(数字),成绩(数字)。
4. 明确表中的主键
每个表应包含一个或多个字段,用于对存储在该表中的每条记录进行唯一标识。这通常是一个唯一的标识号,例如学号或教师编号。在数据库专业术语中,这个信息称为表的主键。在Access中,可以使用主键字段将多个表中的数据关联起来,从而将数据组合在一起。
在成绩管理数据库中,各个表的主键由一个或两个以上的字段组成。教师表的主键为教师编号;班级表的主键为班级编号;课程表中的主键为课程编号;学生表的主键为学号;授课表的主键由教师编号、班级编号和课程编号字段组成;对于成绩表而言,主键均由学号和课程编号两个字段组成。
5. 创建表关系
Access是关系数据库管理系统。在关系数据库中,可以将信息划分到基于主题的不同表中,然后使用表关系根据需要将信息组合在一起。例如,在成绩表和学生表中都有学号字段,在成绩表和课程表中都有课程编号字段,通过这些公共字段分别在成绩表和学生表、成绩表和课程表之间建立关系,这在查询学生成绩时是十分有用的。
为了在数据库设计中表示一对多关系,可以获取关系“一”方的主键,并将其作为附加的一个或多个字段添加到关系“多”方的表中。
例如,在本任务中,将学生表中的学号字段添加到成绩表中。Access可以随后使用成绩表中的学号来查找每条成绩记录所对应的学号。这时,成绩表中的学号字段称为外键。外键是另一个表的主键。例如,成绩表中的学号字段之所以是外键,因为同时它也是学生表中的主键。在这种情况下,学生表也称为父表,成绩表也称为子表。其他表之间的对应关系及主键关系如下所示。
(1)在系别表与教师表之间通过系别编号字段建立关系。
(2)在系别表与班级表之间通过系别编号字段建立关系。
(3)在教师表与授课表之间通过教师编号字段建立关系。
(4)在课程表与授课表之间通过课程编号字段建立关系。
(5)在班级表与学生表之间通过班级编号字段建立关系。
(6)在班级表与授课表之间通过班级编号字段建立关系。
(7)在学生表与选课表之间通过学号字段建立关系。
(8)在学生表与成绩表之间通过学号字段建立关系。
(9)在授课表与选课表之间通过课程编号字段建立关系。
(10)在授课表与成绩表之间通过课程编号字段建立关系。
6. 绘制数据库模型图
完成数据库设计后,可以使用Microsoft Office Visio软件将设计结果绘制成一张数据库模型图,用来描述数据库的结构,表示数据库中包含哪些表,每个表中包含哪些字段,每个字段使用什么数据类型,哪些表之间通过主键和外键建立了关系。关于如何使用Microsoft Office Visio软件来绘制数据库模型图已超出了本书讲解的范围,有兴趣的读者可参阅有关专籍。
成绩管理数据库设计完成后,在Visio软件中所绘制的数据库模型图如图2.1 所示。在这个数据库模型图中,一共包含8 个实体,每个实体对应于数据库中的一个表。实体图的标题行标出了表的名称,例如“班级”、“课程”及“授课”等。各表中均采用以下3 列来表示。
图2.1 Visio软件中的“成绩管理”数据库模型图
(1)左边的列,表示该字段是否为表中的主键(PK)或外键(FK)。
(2)中间的列,列出字段名称(其中表的主键字段名称下方还带有下画线)。
(3)右边的列,列出字段的数据类型和字段大小。
表之间建立的关系使用一条带箭头的线段或折线来表示,带箭头的一端指向父表(公共字段在该表中为主键),不带箭头的一端指向子表(公共字段在该表中为外键)。
从图2.1 可以看出,某些表中的主键同时也是外键。例如,成绩表中的主键由学号和课程编号两个字段组成,这些字段同时又是其他表在该表中的外键,其中学号字段是学生表中的主键,课程编号字段是课程表中的主键。授课表中的主键由教师编号、班级编号和课程编号3个字段组成,这些字段同时又是其他表在该表中的外键,因为学号字段是学生表中的主键,班级编号字段是班级表中的主键,课程编号字段则是课程表中的主键。
知识与技能
1. 数据库设计原则
在数据库设计过程中,应当遵循的原则:尽量不要包含冗余数据,因为这种重复信息不仅会浪费内存空间,还会增大出错和不一致的可能性。此外,信息的正确性和完整性也很重要,如果在数据库中包含不正确的信息,则任何从数据库中提取信息的报表也将包含不正确的信息。因此,基于这些报表所做的任何决策都将提供错误信息。
因此,良好的数据库设计应该满足以下几个标准。
(1)将信息划分到基于主题的表中,以减少冗余数据。
(2)向Access提供根据需要连接表中信息时所需的信息。
(3)可以支持和确保信息的准确性与完整性。
(4)可以满足数据处理和报表设计的需求。
2. 数据库设计步骤
数据库设计主要包括以下步骤。
(1)确定数据库的用途。这一步可以帮助其他步骤进行准备工作。
(2)查找和组织所需的信息。收集希望在数据库中记录的各种信息,如学号、成绩、产品名称和订单编号等。
(3)将信息划分到表中。将信息项划分到主要的实体或主题中,如学生、课程或成绩表。其中,每个主题即构成一个表。
(4)将信息项转换为列。确定希望在每个表中存储哪些信息,每个项被称为一个字段,并作为列显示在表中。例如,“学生”表中可以包含“学号”和“姓名”等字段。
(5)指定主键。在这一步中,选择每个表的主键。主键是一个用于唯一标识每个行的字段。例如,主键可以是学号或课程编号,也可以是“学号”和“课程编号”的组合。
(6)建立表关系。查看每个表,并确定各个表中的数据如何彼此关联。根据需要,将字段添加到表中或创建新表,以便清楚地表达这些关系。
(7)优化设计。分析设计中是否存在错误;创建表并添加一些示例数据记录;确定是否可以从表中获得期望的结果。根据需要,对设计进行调整。
(8)应用规范化规则。应用数据规范化规则,以确定表的结构是否正确。根据需要,对表进行调整。
(9)在Word文档中将数据库设计的结果画成表格,或者使用Visio软件绘制成数据库模型图。这些表格或图形可以为实现数据库提供依据。