数据库课程设计指导书.docx
《数据库课程设计指导书.docx》由会员分享,可在线阅读,更多相关《数据库课程设计指导书.docx(22页珍藏版)》请在冰点文库上搜索。
![数据库课程设计指导书.docx](https://file1.bingdoc.com/fileroot1/2023-6/4/4360f1d9-997a-4416-8eb4-ea4b755d74d6/4360f1d9-997a-4416-8eb4-ea4b755d74d61.gif)
数据库课程设计指导书
数据库课程设计指导书
计算机与信息技术学院
计算机科学技术专业
2015年7月
第一部分数据库课程设计概述
数据库技术是近年来计算机科学技术中发展最快的领域之一,它已成为计算机信息系统与应用系统的核心技术和重要基础。
数据库课程设计的目的和选题原则如下:
一、课程设计的目的和意义
1.加深对讲授内容的理解
数据库理论课中有关数据库技术的基本理论、基本概念、设计与实现的方法和阶段性知识,光靠课堂讲授既枯燥无味又难以记住,但它们都很重要,要想熟练掌握,必须经过大量实践环节加深对它们的理解。
2.通过课程设计,掌握数据库应用系统设计与开发的方法及步骤
数据库是一门应用性很强的学科,开发一个数据库系统需要集理论、系统和应用三方面为一体,以理论为基础,以系统(DBMS)作支柱,以应用为目的,将三者紧密结合起来。
同时结合实际需要开发一个真实的数据库系统,对于较大型的系统可多人一起完成,但无论如何都应完成数据库的需求分析、数据的分析与建模、数据库的建立、数据库的开发与运行等全部过程。
在此过程中将所学的知识贯穿起来,达到能够纵观全局,分析、设计具有一定规模的题目要求,基本掌握数据库系统设计与开发的基本思路和方法,并且做到对知识的全面掌握和运用。
3.培养自学以及主动解决问题的能力
通过本次设计,使同学能够主动查阅与数据库相关资料,掌握一些课堂上老师未曾教授的知识,从而达到培养学生自学以及主动解决问题的能力的目的,为后面的毕业设计打下坚实的基础。
二、选题的原则
课程设计题目选用学生相对比较熟悉的业务模型,通过本次实践性教学环节,巩固数据库的基本概念、基本原理、关系数据库的设计理论、设计方法等主要相关知识点,针对实际问题设计概念模型,并应用现有的工具完成小型数据库系统的设计与实现。
1.选题要求
(1)能覆盖多个知识点,使用现有工具能够解决的问题。
(2)难易适中,具有典型意义。
2.参考选题
(1)教工管理系统
(2)超市管理系统
(3)社团管理系统
(4)毕业设计管理系统
(5)实验室管理系统
(6)网络购物管理系统
(7)票务管理系统
(8)图书管理系统
(9)其他:
同学自己提出,由教师确认的题目。
三、课程设计实施步骤
同学们可按下列步骤完成所选题目的设计并写出设计报告。
第一步:
问题分析
在对所选题目进行调研的基础上,明确该选题要做什么。
依据调查结果,进一步分析和表达用户的需求。
1.绘制数据流程图:
(1)基本符号
(2)数据流程图绘制方法:
自顶向下,分层绘制。
(3)数据流程图绘制规则
①每张数据流程图须从左往右绘制,即从产生数据的外部实体开始到使用数据的外部实体结束。
②对含义明显的数据流,其名称可以省略。
③尽量避免数据流的交叉。
④对于需在两个设备上进行的处理,应避免直接相连。
可以在它们之间加一个数据存储。
⑤如果一个外部实体提供给某一处理的数据流过多,可将它们合并成一个综合的数据流。
⑥下层图中的数据流应与上层图中的数据流守恒。
⑦对于大而复杂的系统,其图中的各元素应加以编号。
通常在编号之首冠以字母,用以表示不同的元素,可以用P表示处理,用D表示数据流,用F表示数据存储,用S表示外部实体。
2.构建数据字典
(1)数据项
(2)数据结构
(3)数据流
(4)数据存储
(5)处理过程
第二步:
数据库设计与实现。
包括:
数据库的概念结构(E—R)图:
(1)画出系统各部分(子系统)E-R模型图
(2)消除冲突和冗余,合并各部分E-R模型图,形成总体E-R模型图
(3)若系统较简单可直接画出系统总体E-R模型图;
逻辑与物理结构设计:
将E-R图转换为关系模型,及设计数据库中的表、视图(如果使用)、存储过程(如果使用)的结构和定义(可以用SQL脚本提供);
将所设计的数据库在SQL Server2000上实现,并进行备份;
设计系统查询功能及要求,写出主要的查询SQL语句。
第三步:
系统功能设计与实现,同时对设计结果进行评价与总结。
对设计结果的合理性、规范程度和实际运行的结果以报告的形式进行提交。
通过存储过程和触发器完成相关功能。
四、课程设计报告要求
课程设计报告有四个方面的要求:
1.问题描述。
包括此问题的理论和实际两个方面。
2.解决方案。
包括:
(1)数据流图及数据字典;
(2)E-R模型要设计规范、合理,关系模式的设计要满足关系规范化理论,数据库的设计要考虑完整性的要求;
(3)给出E-R模型和关系模式的描述或说明;
(4)数据表结构;
(5)相应的触发器、存储过程。
3.报告撰写格式要规范,具体参见样例。
第二部分学生管理系统示例
2.1需求分析
2.1.1需求描述
通过调研分析,我们认为学生管理系统的具体要求为:
1.能全面管理学校教学相关的各类主体,如院系信息、教师信息、班级信息、学生信息、课程信息、专业信息等;
2.通过使用计算机能方便的维护(包括插入、删除、修改)各信息表;
3.能方便的实现基于多个表的连接查询;
因而,我们所开发的管理系统正是围绕以上几个方面进行的,在开发过程中充分考虑到本系统的应用特点,按照数据库设计的几个步骤进行。
2.1.2数据流图
图2.1数据流图
(1)
图2.2数据流图
(2)
2.1.3数据词典
表2.1数据字典
数据元素
数据类型
长度
数据来源
系编号
varchar
50
院系表
系名
varchar
50
院系表
主任工号
varchar
50
院系表
电话
varchar
50
院系表
专业号
varchar
50
专业表
专业名
varchar
50
专业表
班号
varchar
50
班级表
班名
varchar
50
班级表
人数
varchar
50
班级表
教师号
varchar
50
教师表
姓名
varchar
50
教师表
性别
varchar
50
教师表
学号
varchar
50
学生表
姓名
varchar
50
学生表
性别
varchar
50
学生表
出生年月
smalldatetime
8
学生表
籍贯
varchar
50
学生表
名族
varchar
50
学生表
政治面貌
varchar
50
学生表
院系
varchar
50
学生表
专业班级
varchar
50
学生表
照片
image
16
学生表
电话
varchar
50
学生表
课号
varchar
50
课程表
课名
varchar
50
课程表
学分
float
8
课程表
类别
varchar
50
课程表
开课院系
varchar
50
课程表
任课老师
varchar
50
课程表
学时
varchar
50
课程表
成绩
varchar
50
选课表
效果
varchar
50
讲授表
2.2数据库概念结构设计
2.2.1E-R图
图2.3实体联系图、主要联系及其属性
2.2.2实体及属性的定义
在此系统中实体有:
院系、专业、班级、教师、学生、课程
多对多联系有:
选课、讲授
……
2.3数据库逻辑结构设计
2.3.1初始关系模式
将E-R图转换成关系数据模式,其中,每个实体转换成一个关系模式,多对多联系转换成独立的关系模式,一对多联系并入多端实体,得到以下初始关系模式:
院系(系编号,系名,主任工号,电话)
专业(专业号,专业名,系编号)
班级(班号,班名,人数,专业号,教师号)
教师(教师号,姓名,性别,系编号)
学生(学号,姓名,性别,出生年月,籍贯,民族,政治面貌,院系,电话,班号)
课程(课号,课名,讲课学时,开课院系,任课老师,学分)
选课(学号,课号,成绩)
讲授(教师号,课号,效果)
2.3.2规范化处理
经过对初始关系模式的规范化处理,以下关系模式中不存在部分函数依赖和传递函数依赖,已经达到3NF。
(=代表主码,≈代表外码)
院系(系编号,系名,主任工号,电话)
专业(专业号,专业名,系编号)
班级(班号,班名,人数,专业号,教师号)
教师(教师号,姓名,性别,系编号)
学生(学号,姓名,性别,出生年月,籍贯,民族,政治面貌,院系,电话,班号)
课程(课号,课名,讲课学时,开课院系,任课老师,学分)
选课(学号,课号,成绩)
讲授(教师号,课号,效果)
2.4数据库物理结构设计
为了加快数据查询处理速度,为下列各关系模式创建如下索引:
院系:
专业:
班级:
教师:
学生:
课程:
选课:
讲授:
2.5数据库实施
2.5.1数据库各表结构
表2.2院系表
属性名
数据类型
长度
是否允许为空
有无索引
系编号
varchar
50
不允许
有
系名
varchar
50
允许
无
主任工号
varchar
50
允许
无
电话
varchar
50
允许
无
表2.3专业表
属性名
数据类型
长度
是否允许为空
有无索引
专业号
varchar
50
不允许
有
专业名
varchar
50
允许
无
系编号
varchar
50
不允许
有
表2.4班级表
属性名
数据类型
长度
是否允许为空
有无索引
班号
varchar
50
不允许
有
班名
varchar
50
允许
无
人数
varchar
50
允许
无
专业号
varchar
50
不允许
有
教师号
varchar
50
不允许
有
表2.5教师表
属性名
数据类型
长度
是否允许为空
有无索引
教师号
varchar
50
不允许
有
姓名
varchar
50
允许
无
性别
varchar
50
允许
无
系编号
varchar
50
不允许
有
表2.6学生表
属性名
数据类型
长度
是否允许为空
有无索引
学号
varchar
50
不允许
有
姓名
varchar
50
允许
无
性别
varchar
50
允许
无
出生年月
smalldatetime
8
允许
无
籍贯
varchar
50
允许
无
名族
varchar
50
允许
无
政治面貌
varchar
50
允许
无
院系
varchar
50
允许
无
专业班级
varchar
50
允许
无
照片
Image
16
允许
无
电话
varchar
50
允许
无
班号
varchar
50
不允许
有
表2.7课程表
属性名
数据类型
长度
是否允许为空
有无索引
课号
varchar
50
不允许
有
课名
varchar
50
允许
无
学时
varchar
50
允许
无
类别
varchar
50
允许
无
讲课学时
varchar
50
允许
无
开课院系
varchar
50
允许
无
任课老师
varchar
50
允许
无
学分
varchar
50
允许
无
表2.8选课表
属性名
数据类型
长度
是否允许为空
有无索引
学号
varchar
50
不允许
有
课号
varchar
50
不允许
有
成绩
Float
8
允许
无
表2.9讲授表
属性名
数据类型
长度
是否允许为空
有无索引
教师号
varchar
50
不允许
有
课号
varchar
50
不允许
有
效果
Float
8
允许
无
2.5.2关系图
通过设置各表的主键和外键,在各个关系间建立联系,得到以下关系图:
图2.4关系图
2.6数据库操作部分
2.6.1数据库的插入操作
INSERT
INTO<表名>[(<属性列1>[,<属性列2>…)]
VALUES(<常量1>[,<常量2>]);
例如:
在学生表中插入一个新同学的相关信息(注:
学号是主码,故不可以相同)
INSERT
INTO学生表(学号,姓名,性别,出生年月,籍贯,政治面貌,名族,院系,电话)
VALUES(‘34’,’丁一’,’女’,’1986年1月1号’,’北京’,’团员’,’汉族’,’信息工程系’,’’)
2.6.2数据库的修改操作
UPDATE<表名>
SET<列名>=<表达式>
[WHERE<条件>];
例如:
在学生表中修改学号为’’的院系为’人文科学系’。
UPDATE学生表
SET院系=人文科学系
WHERE学号=
2.6.3数据库的删除记录操作
DELETE
FROM<表名>
[WHERE<条件>];
例如:
删除学号为’’的相关信息
DELETE
FROM学生表
WHERE学号=
2.6.4触发器和存储过程
利用触发器和存储过程完成一些相对复杂的操作。
存储过程:
预先用SQL语句写好的,并用存储起来,如果需要的数据库提供与定义好的存储过程的功能相同时,只要调用execute()方法,即可执行。
触发器:
是一种特殊的存储过程,当运行到标签所在的位置时,才触发这个SQL语名的功能。
--创建计算平均值的触发器
create trigger trigger_avg_insert on score for insert as
begin transaction
declare @count int
update student set SScore=(select avg(EScore) from score where SId=(select SId from inserted)) where SId=(select SId from inserted) select @count=@@error if(@count=0) commit transaction else
rollback transaction
--创建计算平均值得触发器
create trigger trigger_avg_delete on score for delete as
begin transaction
update student set SScore=(select avg(EScore) from score where SId=(select SId from deleted)) where SId=(select SId from deleted) declare @count intselect @count=@@error if(@count=0)
commit transaction else
rollback transaction
--创建计算平均值的触发器
create trigger trigger_avg_update on score for update as
begin transaction
declare @count int
update student set SScore=(select avg(EScore) from score where SId=(select SId from inserted)) where SId=(select SId from deleted) select @count=@@error if(@count=0)
commit transaction else
rollback transaction
--创建查找平均分存储过程
CREATEPROCEDUREproc_student_avg(@SIDvarchar(20))AS
begintransaction
selectavg(EScore)asSAvgfromscorewhereSId=@SIddeclare@countintselect@count=@@errorif(@count=0)
committransactionelse
rollbacktransaction
--创建通过学号查询学生信息的存储过程
Createprocproc_student_select_bySId(@SIdvarchar(20))as
begintransaction
declare@countintselect*fromstudentwhereSId=@SIdselect@count=@@errorif(@count=0)
committransactionelse
rollbacktransaction
--创建插入学生信息的存储过程
create proc proc_student_insert (
@SId varchar(20), @SName varchar(20), @SClass varchar(20), @SSex varchar(10) ) as
begin transaction
declare @count int
insert into student(SID,SName,SClass,SSex) values(@SId,@SName,@SClass,@SSex)
select @count=@@error if(@count=0)
commit transaction else
rollback transaction GO
--删除学生信息的存储过程
Create proc proc_student_delete (
@SId varchar(20) ) as
begin transaction
declare @count int
delete from student where SId=@SId select @count=@@errorif(@count=0)
commit transaction else
rollback transaction
--修改学生信息的存储过程
Create proc proc_student_update (
@SId varchar(20), @SName varchar(20), @SClass varchar(20), @SSex varchar(10) ) as
begin transaction
declare @count int
update student set SName=@SName,SClass=@SClass,SSex=@SSex where SId=@SId
select @count=@@error if(@count=0)
commit transaction else
rollback transaction
--创建查询课程信息的存储过程
Create proc proc_class_select as
begin transaction
declare @count int select * from class select @count=@@error if(@count=0)
commit transaction else
rollback transaction
--创建通过课程号查询课程信息的存储过程
Create proc proc_class_select_byEId (
@EId varchar(20) ) as
begin transaction
declare @count int
select * from class where EId=@EId select @count=@@error if(@count=0)
commit transaction else
rollback transaction
--创建插入课程信息的存储过程
Create proc proc_class_insert (
@EId varchar(20), @EName varchar(20), @ETime int ) as
begin transaction
declare @count int
insert into class(EId,EName,ETime) values(@EId,@EName,@ETime) select @count=@@error if(@count=0)
commit transaction else
rollback transaction
select @count=@@error if(@count=0)
commit transaction else
rollback transaction
--创建通过课程号查询课程信息的存储过程
Create proc proc_class_select_byEId (
@EId varchar(20) ) as
begin transaction declare @count int
select * from class where EId=@EId select @count=@@error if(@count=0)
commit transaction else
rollback transaction
--创建插入课程信息的存储过程
Create proc proc_class_insert (
@EId varchar(20), @EName varchar(20), @ETime int ) as
begin transaction
declare @count int
select * from score where SId=@SId select @count=@@error if(@count=0)
commit transaction else
rollback transaction
第三部分结束语
上面为大家简要介绍了本课程设计的目的及方法,并通过案例进行了详细的论述,大家可以根据自己的具体情况决定相应功能的实现方法,不要局限于上面的描述,要发挥自己创造力,设计出具有