信息工程学院
《数据库课程设计》论文
题 目:学生选课系统数据库设计
学生选课系统数据库设计
李鹏英
(信息工程学院计算机09级3班)
摘 要 网上选课系统已经在很多高校得到广泛的应用,深得广大师生的称赞,它改变了以往由学校统发课程表到学生手中,然后由学生填好再反馈到学校,而学校还要对结果进行审查,确定有效性,最后才实施上课计划,这一传统的手工选课不仅复杂,也牵涉了很多的人力,对管理也造成了诸多不变,而借助网上选课系统,学生在规定选课时间段内,可以不受地点和时间的限制完成选修课的申请,而学校也可以方便地对系统进行管理和控制,提高工作效率。
关键字:数据库设计、学生选课、排课
引言:随着当代教育的不断发展,内容的不断丰富,课程量和学生数量大大增加,选课作为学校教育工作开展的关键环节,必须做到更加快捷、条理和效率。每个学生每学期需要完成相应的上课、上机以及实验等各项任务。因此,建立一个属于学校自己的选课管理系统很有必要。
互联网的普及和数据库系统的便捷作用为学校的网上选课提供了很好的条件和工具。网上选课系统是依据大学的选修课的网上申请和管理需求而进行设计的,目的是实现选修课的网上设置、申请功能。根据大学选修课管理的基本过程,网上选课系统应具备课程设置、课程查询、学生选课、管理员管理等基本功能要求。系统的主要使用者有学生、开课教师和教务管理人员。
目 录
1.需求分析... 1
1.1处理对象及组织... 1
1.2信息处理及系统功能... 1
1.2.1 业务流程的调查... 1
1.2.2 数据流程的建立... 3
1.2.3 数据字典的建立... 7
2.数据库结构设计... 7
2.1 概念设计... 7
2.1.1 分E-R图建立... 7
2.1.2 全局/整体E-R图... 10
2.2 逻辑设计... 11
2.2.1 建立关系模式... 11
2.2.2 关系模式规范化处理... 12
2.2.3 用户子模式建立... 13
2.2.4 关系模式逻辑结构定义... 13
3.数据库物理设计... 14
4.数据库实施与测试... 14
4.1 数据库实施... 14
4.1.1 数据库及数据库对象建立... 14
4.1.2 数据入库... 15
4.2 数据库测试... 15
5.总结... 15
附录... 16
附录1. 16
附录2. 19
附录3. 21
附录4. 27
1.需求分析
1.1处理对象及组织
该系统的需求分析所处理的主要对象是学生网上选课的所有业务,包括学生选课、教师开课、教务管理员排设课程以及各种相关的信息查询及修改业务,一定要在充分了解业务工作概况,明确用户的各种需求,然后在此基础上确定系统的功能。
需求分析阶段的任务如下:
(1)熟悉学生选课系统的业务流程及工作情况并绘制业务流程图;
(2)根据业务流程把数据在组织内部的流动情况抽象出来,并绘制成数据流图;
(3)详细地收集和分析各类数据,建立数据字典,其中包括数据项、数据结构、数据流、外部实体、数据存储、处理过程等。
1.2信息处理及系统功能
1.2.1 业务流程的调查
通过自己和身边同学对选课系统的使用体会调查了解了该系统的业务流程,基本掌握了学生网上选课的具体处理过程,以及处理需求。掌握业务流程图可以在建立系统时使系统的功能更加完整,结构更加优化,业务处理更加清晰。网上选课发涉及到学生选课、教师开课以及教务管理员排课三个业务模块,因此,为该系统创建了两个业务流图如下图1-1至图1-2所示:
选课业务流图:
排课业务流图:
1.2.2 数据流程的建立
数据流程的建立就是舍去选课的机构、信息载体、处理工作等,只把数据在系统内部的流动情况独立地抽象出来,单从数据流动的过程来考查选课系统的数据处理模式。该系统所创建的五个数据流图如下图1-3至图1-7所示:
顶层数据流图:
一层数据流图:
二层选课数据流图:
二层排课数据流图:
二层开课据流图:
1.2.3 数据字典的建立
数据字典是建立数据库的数据基础,是经过多方面的数据采集、数据筛选分析所得,是系统开发的重要步骤,在数据库设计中占据着非常重要的地位。常见的数据字典由数据项、数据结构、数据流、外部实体、数据存储及处理过程等组成。由于时间关系,本系统只列出了数据项和数据结构。详细数据项、数据结构见附录1表1-1和表1-2。
2.数据库结构设计
2.1 概念设计
概念设计是将需求分析得到的用户需求抽象为概念模型的过程,这个阶段主要的目标是通过对用户需求进行综合、归纳与抽象,形成一个独立于DBMS的概念模型(E-R图)。对这个阶段的要求有:
(1)能真实、充分地反映现实世界,包括事物与事物之间的联系,能满足用户对数据的处理要求,是对现实世界的一个真实模型;
(2)易于理解,因此可以用它和不熟悉计算机的用户交换意见;
(3)易于更改,当应用环境和应用要求改变时,容易对概念模型修改和扩充;
(4)易于向关系、网状、层次等各种数据模型转换。
实现概念设计的任务和方法:
(1)设计分E-R图,生成初步E-R图;
(2)通过合并等方法,消除冲突、冗余等,生成全局E-R图。
2.1.1 分E-R图建立
分E-R图就是全局概念模式下的底层概念模式向E-R图的转化。先从用户全局需求出发,逐曾细化得到底层需求,把每个底层需求转换为一个概念模式,再逐层合成概念模式得到全局概念模式。每个底层概念模式都要转化为分E-R图。
设计分E-R图的思想是,以中层数据流为切入点,利用抽象机制对需求分析阶段收集到的数据进行分类、聚集、概括,形成实体、实体的属性、标识实体的码、确定实体之间的联系类型(1:1,1:n,m:n),再逐一设计分E-R图。为学生选课系统所创建的实体及其属性图和两个分E-R图如下图2-1至图2-3所示:
实体及其属性E-R图:
选课E-R图:
排课E-R图:
2.1.2 全局/整体E-R图
由分E-R图到全局E-R图的过程就是视图集成的过程,一般来说有两种方式:
(1)多个分E-R图一次集成,难度较大;
(2)逐步集成,用累加的方式一次集成两个分E-R图,可以降低复杂度。
无论采用哪种方式,每次集成局部E-R图时都需要分两步走:(1)合并;(2)修改和重构。
在合并分E-R图时,主要是为消除各分E-R图之间的冲突,包括属性冲突、命名冲突、结构冲突。在消除属性冲突时,需要调整属性域和属性的取值单位;消除命名冲突,主要是为预防同名异义或异名同义的情况;结构冲突包括的比较多,每种都有自己的解决方法,主要有:(1)同一对象在不同应用中具有不同的抽象,解决时通常是把属性变换为实体或把实体转换为属性,使同一对象具有相同的抽象;(2)同一实体在不同分E-R图中所包含的属性个数和属性排列次序不完全相同,可以通过取该实体属性为各分E-R图中属性的并集,再适当调整属性的次序;(3)实体间的联系在不同的分E-R图中为不同的类型,可以根据应用的语义对实体联系的类型进行综合或调整。
修改或重构主要是为消除不必要的冗余。消除冗余主要采用分析方法,即以数据字典和数据流图为依据,根据数据字典中关于数据项之间逻辑关系的说明来消除冗余;此外也可以用规范化理论来消除冗余。当然,并非所有的冗余数据与冗余联系都必须加以消除,有时为了提高效率,也会不得不以冗余信息作为代价,这个需要根据用户的整体需求来确定。
在合并和修改或重构之后,学生选课系统的全局E-R图如图2-4所示:
全局E-R图:
说明:
一个学生可以选修多门课程,一门课程可以被多名同学选修;
一个教师只可以担任一门课程,一门课程可以有多名教师担任;
一个教室可以供不同的课程使用,一门课程可以使用不同的教室;
一个学院可以包含过个专业,一个专业只属于一个学院;
一个管理员可以排多门课程,一门课程只能由一名管理员排设;
2.2 逻辑设计
逻辑设计就是把概念设计阶段的基本E-R图转换为所用DBMS产品支持的数据模型。本系统中是将概念设计所得到的E-R图转换为关系数据模型。
实现逻辑设计的任务和方法:
(1)将E-R模型转换为关系模型,明确关系模式的属性和码;
(2)利用规范化理论对现有数据模型进行优化;
(3)完成数据库模式定义,包括各模式的逻辑结构定义、关系的完整性和安全性等内容;
(4)完成用户子模式的设计。
2.2.1 建立关系模式
将E-R模型转换为关系模型实际上就是要将实体型、实体的属性和实体型之间的联系转换为关系模式。转换一般遵循以下原则:
一个实体型转换为一个关系模式。实体的属性就是关系的属性,实体的码就是关系的码。
实体间的联系的转化情况:一个1:1联系可以转换为一个独立的关系,也可以与任意一段对应的关系模式合并;一个1:n联系可以转化为一个独立的关系模式,也可以与n端的关系模式合并;一个m:n的联系必须转化为一个关系模式。
学生、教师、教务管理员、课程、教室、教学楼、学院、专业、选课时间段,这些都需要转换为关系模式。
转换结果:
学生(学号,姓名,年龄,性别,所在学院名称,所在专业,所在年级)
教师(教工号,姓名,年龄,性别,所属学院名称,研究方向)
教务管理员(编号,姓名,性别,年龄,主要负责业务)
教室(教室编号,所属教学楼编号,最大容纳学生人数,性质)
教学楼(编号,名称,拥有的教室数量,性质)
课程(编号,名称,学分,最大选课人数,性质,开课学院,面向的专业,面向的年级,起始上课周次,截止上课周次,上课时间)
学院(编号,名称,拥有专业数量,拥有学生数量,性质)
专业(编号,名称,性质,拥有的学生数量)
选课时间段(起始选课时间,截止选课时间)
完全函数依赖F:
学号—>姓名 学号—>所在学院
学号—>所在年级 学号—>性别
教工号—>姓名 教工号—>年龄
教工号—>所在学院 课程编号—>课程名称
课程编号—>最大选课人数 课程编号—>课程学分
管理员编号—>姓名 管理员编号—>主要负责的业务
教室编号—>所在教学楼 教室编号—>教室性质
教室编号—>最大容纳人数 专业编号—>所在学院名称
专业编号—>专业名称 学院编号—>学院名称
等等,每个关系的属性均依赖于它的主属性。
2.2.2 关系模式规范化处理
根据F可知:
学生(学号,姓名,年龄,性别,所在学院名称,所在专业,所在年级)满足3NF
教师(教工号,姓名,年龄,性别,所属学院名称,研究方向)满足3NF
教务管理员(编号,姓名,性别,年龄,主要负责业务)满足3NF
教室(教室编号,所属教学楼编号,最大容纳学生人数,性质)满足3NF
教学楼(编号,名称,拥有的教室数量,性质)满足3NF
课程(编号,名称,学分,最大选课人数,性质,开课学院,面向的专业,面向的年级,起始上课周次,截止上课周次,上课时间)满足3NF
学院(编号,名称,拥有专业数量,拥有学生数量,性质)满足3NF
专业(编号,名称,性质,拥有的学生数量)满足3NF
选课时间段(起始选课时间,截止选课时间)满足3NF
2.2.3 用户子模式建立
目前关系数据库管理系统一般都提供了视图概念,可以利用这一功能来设计更符合局部用户需要的用户子模式。
考虑到用户的习惯与方便,设计了如下视图:
(1)为学生建立视图:便于查询详细的课程及上课情况
选课信息(学号,姓名,课程号,课程名称,课程性质,教工号,教师姓名,开课学院名称,课程学分,实际上课总人数,上课时间等)
(2)为教务管理员建立视图:便于查询学生、课程等情况
排课信息(课程编号,课程名称,学号,姓名,教学楼等)
具体用户子模式定义如下表:
表2-1 (学生选课系统)关系外模式
2.2.4 关系模式逻辑结构定义
根据关系模式的转换原则,该冷饮批发系统可以抽象为十一个关系模式。在定义关系模式时,有关系模式的逻辑结构定义、关系的完整性和安全性等内容。其中关系模式的逻辑结构定义包括关系模式各属性的确定、码的确定、外码的确定、各属性的约束等等。
具体关系模式的逻辑结构如下表:
表2-2 (学生选课系统)关系模式汇总
3.数据库物理设计
数据库在物理设备上的存储结构与存取方法称为数据库的物理结构,它依赖于选定的数据库管理系统。为一个给定的逻辑数据模型选取一个最适合应用要求的物理结构的过程,就是数据库的物理设计。
通常关系数据库物理设计的内容主要包括:
(1)为关系模式选择存取方法;
(2)设计关系、索引等数据库文件的物理存储结构。
4.数据库实施与测试
在完成数据库的物理设计之后,就要用RDBMS提供的数据定义语言和其他实用程序将数据库逻辑设计和物理设计结果严格描述出来,成为DBMS可以接受的源代码,再经过调试产生目标模式。然后组织数据入库,这就是数据库的实施阶段。
在实施阶段完成之后,就要对数据库系统进行预定目标的测试。在测试期间,要考虑到数据库的安全性与完整性控制,还要对数据库性能进行监督、分析和改造。这一切工作都要不断进行,直到测试达到预定目标。
4.1 数据库实施
4.1.1 数据库及数据库对象建立
此学生选课系统数据库及数据库对象的建立包括创建数据库、创建基本表、创建视图、创建触发器、创建存储过程等,具体的DDL语句及相关代码详见附录3。
4.1.2 数据入库
数据入库过程就是数据录入的过程。在SQL中,可以用EXCEL批量导入的方法录入,也可以逐条录入。
4.2 数据库测试
数据库测试是数据库设计必不可少的阶段,它是对整个数据库设计合不合格的检验,也是判定此数据库设计是否达到目标的标准。详细图片见附录4。
5.总结
两周的数据库课程设计结束了,经过紧张的两周训练,基本上完成了任务。任务很多,量也很大,而且一步紧扣一步,只要是前面哪个部分有问题,后面再做的时候就会遇到各种问题。
让我感触最深的就是需求分析这部分,以前上课的时候老师就强调过这部分内容的重要性,他直接关系到整个系统的功能、状态等等,如果做不好,就会出现系统在实施运行时的各种问题,甚至会是一个错误的系统。当时可能没有意识到这点,真正在做的时候才深有体会。
由于前面需求分析时间紧张,加之我们没有亲身调查的机会,可能对某些业务了解的并不是很清楚,对每一部分的具体要求可能没有掌握到位。画业务流图、数据流图、生成数据字典等,这每一步都是极其重要和关键的。后面再做各种结构时,每次总是会不同程度的发现部分需求分析阶段的问题,然后就要修改,然而,修改也不是每次都行得通。在一次一次的反复修改业务流图、数据流图、数据项的过程中,逐渐深刻的体会到需求分析的重要性。
数据库的课程实习做完了,可是一留下了许多的问题等待我们解决,比如说这次课程设计中用到的存储过程和触发器,怎么用它,怎么更高效的用它等等一系列的问题就需要我们在课后自己查资料、自己实践、自己总结。对于自己已经做的这个系统,需要回过头来再仔细思考一遍,对自己在做的时候所遇到的问题、困惑回头想想、总结、思考,真正做到从中收获知识、收货方法、收获思想。
附录
附录1
表1-1 学生选课系统数据项表
表1-2 学生选课系统数据结构表
附录2
表2-3 学生信息表
表2-4 教师信息表
表2-5 教务管理员信息表
表2-6 课程信息表
表2-7 教室信息表
表2-8 教学楼信息表
表2-9 学院信息表
表2-10 专业信息表
表2-11 选课时间段信息表
附录3
学生信息表:
create table S
( Stu_No varchar(15) primary key,
Stu_Name varchar(20),
Stu_Sex char(3),
Stu_Age smallint,
Stu_AcadName varchar(20),
Stu_DeptName varchar(20),
Stu_Grade varchar(10)
)
教师信息表:
create table T
( Tea_No varchar(10)primary key,
Tea_Name varchar(20),
Tea_AcadName varchar(20),
Tea_Sex char(3),
Tea_Age smallint,
Tea_Tend varchar(20)
)
课程信息表:
create table C
( Cou_No varchar(15) primary key,
Cou_Name varchar(20),
Cou_Xzh varchar(15),
Cou_AcadName varchar(20),
Stu_TotalNo smallint check(Stu_TotalNo>=60 and Stu_TotalNo<=200),
Cou_DeptName varchar(20),
Cou_Grade varchar(15),
Cou_MaxStu smallint check(Cou_MaxStu>=60 and Cou_MaxStu<=200),
Cou_Credit smallint check(Cou_Credit>=1 and Cou_Credit<=15),
Cla_Sweek smallint check(Cla_SWeek>=1 and Cla_SWeek<=21),
Cla_Eweek smallint check(Cla_EWeek>=9 and Cla_EWeek<=20),
Cla_Time date
)
教室信息表:
create table Cl
( Cla_No varchar(10) primary key,
Cla_Xzh varchar(15),
Cla_BuildNo varchar(10),
Cla_MaxStu smallint check(Cla_MaxStu>=60 and Cla_MaxStu<=200)
)
教务管理员信息表:
create table MA
( Manag_No varchar(15) primary key,
Manag_Name varchar(20),
Manag_Sex char(3),
Manag_Age smallint check(Manag_Age>=25 and Manag_age<=55),
Manag_Part varchar(20)
)
教学楼信息表:
create table BU
( Build_No varchar(15) primary key,
Build_Name varchar(20),
Build_Xzh varchar(20),
Build_ClaNo smallint check(Build_ClaNo>=20 and Build_ClaNo<=200)
)
学院信息表:
create table AC
( Acad_No varchar(15) primary key,
Acad_Name varchar(20),
Acad_DeptNo smallint,
Acad_StuNo smallint check (Acad_StuNo>=1000 and Acad_StuNo<=1600),
Acad_Xzh varchar(15)
)
专业信息表:
create table DE
( Dept_No varchar(15) primary key,
Dept_Name varchar(20),
Dept_AcadName varchar(20),
Dept_Xzh varchar(15),
Dept_StuNo smallint check (Dept_StuNo>=250 and Dept_StuNo<=370)
)
选课时间段信息表:
create table CT
( Choose_Stime date,
Choose_ETime date
)
选课信息视图:
create view SC
as
select Stu_No,Stu_Name,Cou_No,Cou_Name,Cou_Xzh,Tea_No,Tea_Name,Tea_AcadName,Stu_TotalNo,Cou_Credit,Cou_AcadName,Build_No,Cla_No,Cla_Time
from S,T,C,BU,CL
排课信息视图:
create view PK
as
select Cou_No,Cou_Name,Stu_No,Stu_Name,Tea_Name,Cla_Time,Build_No,Cla_No
from S,C,T,BU,CL
创建插入存储过程:
create or replace procedure P1(v_Tea_No T.Tea_No%type,v_Tea_Name T.Tea_Name%type,v_Tea_Sex T.Tea_Sex%type,v_Tea_Age T.Tea_Age%type, v_Tea_AcadName T.Tea_AcadName%type,v_Tea_Tend T.Tea_Tend%type)
as
begin
insert into T(Tea_No,Tea_Name,Tea_Sex,Tea_Age,Tea_AcadName,Tea_Tend)
values(v_Tea_No,v_Tea_Name,v_Tea_Sex,v_Tea_Age,v_Tea_AcadName,v_Tea_Tend);
commit;
end;
begin
p1('09012225','张三','男',36,'信息工程学院','计算机组成');
commit;
end;
创建查询存储过程(用游标):
declare
v_Stu_No S.Stu_No%type;
v_Stu_Name S.Stu_Name%type;
v_Stu_Sex S.Stu_Sex%type;
v_Stu_Age S.Stu_Age%type;
cursor c1 is
select Stu_No,Stu_Name,Stu_Sex,Stu_Age from S where Stu_DeptName='信息';
begin
open c1;
loop
fetch c1 into v_Stu_No,v_Stu_Name,v_Stu_Sex,v_Stu_Age;
exit when c1%notfound;
dbms_output.put_line(v_Stu_No||'---'||v_Stu_Name||'---'||v_Stu_Sex||'---'||'v_Stu_Age');
end loop;
close c1;
end;
创建删除存储过程:
create or replace procedure p5 is
begin
delete from BU where Build_ClaNo < 70;
commit;
end ;
begin
p5;
commit;
end;
创建更新存储过程:
create or replace procedure p8(v_Cou_Name in C.Cou_Name%type) is
begin
update C set Cou_Credit=Cou_Credit+2 where Cou_Name=v_Cou_Name;
commit;
end ;
begin
p8('线性代数');
commit;
end;
创建插入触发器:
create or replace trigger t3
before insert on DE
for each row
begin
if :new.Dept_Name='动物科学' and :new.Dept_StuNo<300 then
:new.Dept_StuNo:=370;
end if;
end;
附录4
插入过程测试图:
更新测试图:
查询过程测试图: