第1章 程序设计内容及要求
1.1 程序设计题目
(1)创建student_dissertation数据库,在该数据库中创建4张数据表:t_student(学生表)、t_department(专业表)、t_dissertation(课题表)、t_s_dissertation(选题表),它们表结构设计如下:
(2)对各表输入以下数据:
(2)对各表输入以下数据:
1.2程序设计内容及要求
(1)为各表设置主键
(2)查询要求得到所有专业号为1的男生的学生信息
(3)查询得到所有电子系男生的学生信息
(4)创建视图,显示学生所选课题还未通过审批的信息
(5)创建存储过程,通过指定专业,返回该专业所有学生的基本信息
(6)创建触发器,当某课题被删除时,选题表中相关记录也同时被删除
(7)建立数据库相关表之间的参照完整性约束,均设置为级联
1.3程序设计的目的
《数据库原理及应用》课程设计是非常重要的实践环节之一,是学完《数据库原理及应用》课程后的一次全面的综合练习。本课程设计主要在于巩固学生对数据库基本原理和基础理论得理解,掌握数据库应用系统的设计开发的基本方法,进一步提高学生综合运用所学知识的能力。
(1)通过本次设计是了解学生对数据库ˌ表的创建,以及插入数据ˌ存储过程等的掌握情况。
(2)掌握对MySQL的基本操作和使用技能。
(3)复习ˌ巩固本学期所学内容。
(4)通过一个实训提高学生的综合能力,并让学生从中发现自身存在的问题。
第2章程序实现思路
在数据库领域中,通常情况下都会设计E-R图,用来描述现实世界的事物。使用E-R图每一个实体对应一张数据表。
在实体图中,使用矩形表示实体,椭圆表示属性,并且使用无向边将其与实体连接起来。这样就可以很明确的看出实体所带有属性。如下画出四张表的实体图:
(1)学生表E-R图
(2)专业表E-R图
(3)课题表E-R图
(4)选课表E-R图
同时,一个数据库里的表也不是相互独立,它们之间存在着一定的联系,如学生表和专业表中都存在专业号这个属性。在E-R图中,可以使用关系表示实体间的联系。通常使用棱形来表示实体之间的联系。
通过表之间的联系,我们可以实现多表连接查询,通过表之间的关系,可以由一表中的信息查询得到另一表中的信息。理清各表之间的关系之后,再回顾所学知识数据库创建语句create database 创建数据库,再通过create table 创建各个表,之后再完善表里的数据,用insert into values 将数据插入表中。这样一个较完整的数据库就被创建好了。
然后,在由创建好的数据表实现对数据的查询,如提供学生的一个属性信息,可以查询该学生的所有信息。同时,根据题目要求,需要创建相应的视图ˌ存储过程ˌ触发器等。视图作用类似于筛选;触发器相当于给事件发生的前或后装一个触发装置;创建存储过程可以减少数据端和服务端的数据传输。
根据所学知识,通过create view语句创建视图,通过create procedure语句来完成存储过程的创建,通过create trigger来创建触发器。
第3章 程序清单或正文
1.创建数据库
create database student_dissertation;
2.创建t_student表
mysql> create table t_student(
-> studentid char(20) not null,#学生学号
-> studentname char(8) null,#姓名
-> studentsex char(2) null,#性别
-> departmentid int(8) null,#专业号
-> studentphone char(30) null,#电话
-> password char(20) null,#密码
-> primary key(studentid)
-> );
3.创建t_department表
mysql> create table t_department(
-> departmentid int(8) not null primary key,#专业号
-> departmentname char(50) null,#专业名称
-> manager char(8) null #主任名
-> );
4.创建t_dissertation表
mysql> create table t_dissertation(
-> dissertationid char(20) not null primary key,#课题号
-> dissertationname char(30) null,#课题名称
-> attachment char(30) null,#附件说明
-> teachername char(8) null #指导教师名
-> );
5.创建t_s_dissertation表
mysql> create table t_s_dissertation(
-> studentid char(20) not null,
-> dissertationid char(20) not null,
-> introduction text null,
-> sendtime datetime null,
-> state char(10) null,
-> primary key(studentid,dissertationid)
-> );
6.给表t_department输入数据
mysql> insert into t_department values
(1,'电子系','杨明'),
(2,'计算机系','李长山'),
(3,'自动化系','顾林');
7.给表t_student输入数据
mysql> insert into t_student values
-> ('1000','朱群','男',1,'13759778212','123456'),
-> ('1001','王小川','男',1,'13576543233','778899'),
-> ('1002','秦悦','女',2,'13767885731','456123'),
-> ('1003','陈小飞','男',3,'13755897651','369874'),
-> ('1004','胡小丽','女',3,'13567334622','147896'),
-> ('1005','张维','女',1,'13854673392','458972'),
-> ('1006','李勇','男',1,'13787416711','147896'),
-> ('1007','罗青','女',1,'13887914751','146697');
8.给表t_dissertation 输入数据
mysql> insert into t_dissertation values
-> ('Z001','基于CRC技术的无线通信模块','资助','沈方'),
-> ('Z002','基于ARM的室内环境无线监测系统','资助','罗青'),
-> ('D001','基于51单片机的GPS定位仪','资助','郭海'),
-> ('J001','基于B/S构架的数字图书馆','资助','赵萍'),
-> ('J002','听力训练播放器','非资助','王海');
9.给表t_s_dissertation 输入数据
mysql> insert into t_s_dissertation values
-> ('1000','Z001','电子类','2009.10.20','待审批'),
-> ('1001','Z002','电子类','2008.8.5','通过'),
-> ('1002','J001','计算机类','2009.9.28','待审批'),
-> ('1003','D001','电子,自动化类','2009.9.26','待审批'),
-> ('1001','D001','电子,自动化类','2009.10.6','待审批'),
-> ('1002','J002','计算机类','2008.7.24','通过');
10.查询要求得到所有专业号为1的男生的学生信息
mysql> select *from t_student where departmentid=1;
11.查询得到所有电子系男生的学生信息
select * from t_student where departmentid=1 and studentsex='男';
12.创建视图,显示学生所选课题还未通过审批的信息
mysql> create view v_nopass(studentid,dissertation,introduction,sendtime,state) as select * from t_s_dissertation where state='待审批
13.创建存储过程,通过指定专业,返回该专业所有学生的基本信息
mysql> delimiter //
mysql> create procedure p_department (in name char(50))
-> begin
-> select studentid,studentname,studentsex,studentphone,password from t_student where
-> departmentid in(select departmentid from t_department where departmentname=name);
-> end
->//
14.创建触发器,当某课题被删除时,选题表中相关记录也同时被删除
mysql> delimiter //
mysql> create trigger tr_drop after delete
-> on t_dissertation for each row
-> begin
-> delete from t_s_dissertation where t_s_dissertation.dissertationid=old.dissertationid;
-> end
-> //
15.建立数据库相关表之间的参照完整性约束,均设置为级联
AFTER TABLE t_student ADD FOREIGN KEY(departmentid) REFERENCES t_department(departmentid) on delete cascade on update cascade;
alter table t_s_dissertation add foreign key(studentid) references t_student(studentid) on delete cascade on update cascade;
alter table t_s_dissertation add foreign key(dissertationid) references t_dissertation(dissertationid) on delete cascade on update cascade;
第3章 课程设计心得
回顾起此课程设计,至今我仍感慨颇多,从理论到实践,在这段日子里,可以说得是苦多于甜,但是可以学到很多很多的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。通过这次课程设计使我懂得了理论与实际相结合是很重要的。主要收获由以下几点:
(1)回顾了这个学期以来所学的知识,发现了自身的不足和存在的问题。
(2)这是第一次完整的完成整个数据库的创建,懂得我们不仅要掌握理论知识,还更加应该锻炼自己的操作能力,才能更好的学以致用。
(3)在这次难得的课程设计过程中我锻炼了自己的思考能力和动手能力。通过题目选择和设计电路的过程中,加强了我思考问题的完整性和实际生活联系的可行性。
(4)同时,培养了在实践过程中遇到问题后,应该寻找解决的办法的习惯,如借助网络或与同学交流等。
(5)通过这次实训,让我更能体会到数据库的强大与奇妙,以及功能的多样性。
在这次实训中,不仅收获了很多,同时也发现了自身存在的不足,需要改进的地方:
(1)对知识掌握的还不够牢固,上机操作能力还有待于提高。
(2)对数据库的认识仅局限于书本,而没有通过实际生活中去理解。
(3)对于一些查询语句不够熟悉,导致花费的时间较长
(4)对数据库得存储过程理解还不够深入
(5)今后应该多查询资料,把所存在得问题寻找原因并改正,学会学以致用。
(6)平时对遇到的问题没及时解决,导致问题一直存在。
第5章 参考文献
[1] 陈林琳,蒋丽丽,解二虎主编.SQL Server 2008数据库设计教程. 江苏大学出版社,2016年8月
[2]任进军,林海霞 主编 MySQL 数据库管理与开发 人民邮电出版社 2017年6月
[3]百度知道:https://www.unjs.com/fanwenwang/ziliao/590237.html
[4]百度百科:
http://www.360doc.com/content/16/1011/21/15549660_597691151.shtml
[5]百度知道:https://bbs.csdn.net/topics/390822588