数据库实习报告

广东海洋大学 职业技术学院

数据库课程实习报告 (20012-2013学年第2学期)

题目:综合实训

班级:计应111班

姓名:丁永乔 学号: 201136616109 联系电话:158xxxxxxxx 指导教师:杨亚菁 提交日期:2013-5-8

成绩: 日期:评阅教师:

广东海洋大学学生课程设计报告书

一、 题目描述

StudentMis教务管理系统是用来实现学生学籍的管理、学生成绩的管理、课程的管理、学生选修管理等功能的信息系统。该系统采用SQL Server 2005为关系型数据库管理系统,该系统主要满足来自3方面的需求,分别是学生、教务管理人员和系统管理员。

学生:

.注册入学。

.选择每学期学习的课程。

.查询每学期课程考试成绩。

教务管理人员:

.管理学生学籍信息异动。

.管理学生选课信息。

.管理每学期课程考试成绩。

系统管理员:

.管理系统用户。

.管理课程。

.管理部门。

.管理专业。

.管理班级。

二、 目的

1.知识目标

通过综合实训进一步巩固、深化和扩展SQL Server 2005数据库管理和开发技能。

1)熟练掌握SQL Server 2005数据库的操作。

2)熟练掌握SQL Server 2005表的操作。

3)熟练掌握SQL Server 2005视图的操作和应用。

4)掌握SQL Server 2005索引的操作。

5)熟练掌握T_SQL编程技术和SQL Server 2005存储过程的操作和使用。

6)熟练掌握SQL Server 2005触发器的操作和使用。

7)掌握SQL Server 2005数据安全性操作。

8)熟练掌握SQL Server 2005数据管理操作。

9)了解SQL Server 2005数据库程序开发技术。

2.能力目标

培养学生运用所学的知识和技能解决SQL Server 2005数据库管理和开发过程中所遇到的实际问题的能力,掌握基本的SQL脚本编写规范,养成良好的数据库操作习惯。

1)培养学生通过各种媒体搜索资料、阅读资料和利用资料的能力。

2)培养学生基本的数据库应用能力。

3)培养学生基本的编程逻辑思想。

4)培养学生通过各种媒体进行自主学习的能力。

第1页(共19页)

3.素质培养

培养学生理论联系实际的工作作风、严肃认真的工作态度以及独立工作的能力。

1)培养学生观察问题、思考问题、分析问题和解决问题的综合能力。

2)培养学生的团队协作精神和创新精神。

3)培养学生学习的主动性的创造性。

三、 要求

1.完成方式

1)要求使用SSMS和T_SQL语句分别完成实训内容。

2)将SSMS的关键过程截图,并加以说明保存到word文档中上交。

3)将完成实训任务的T_SQL语句以SQL文件的形式保存(可分成多个文件)上交。

2.实训纪律

课程综合实训是操作性很强的教学环节,针对实训的培养目标和特点,教学的方式和手段可以灵活多样。

1)要求学生在机房上机的时间不低于40个学时,并且要求一人一机。学生上机时间可以根据具体情况进行适当增减。

2)实训期间的非上机时间,学生应通过各种媒体获取相关资料进行上机准备工作。

3)实训过程中可以互相讨论,发现问题后找出解决问题的方法,但不允许互相抄袭、复制程序。

四、 实训内容(源代码)

(一)数据库对象的管理

1.数据库

-- =========================================================

-- 创建数据库StudentMis

-- 请首先在D盘建立一个名字为Data的文件夹,或修改语句中的盘符

-- =========================================================

CREATE DATABASE StudentMis

ON

(NAME=StudentMis_dat,

FILENAME='E:\DATA\StudentMis_dat.mdf',

SIZE=10MB,

MAXSIZE=UNLIMITED,

FILEGROWTH=1MB)

LOG ON

(NAME='StudentMis_log',

FILENAME='E:\DATA\StudentMis_log.ldf',

SIZE=1MB,

MAXSIZE=2GB,

FILEGROWTH=10%)

go

USE StudentMis

Go

2.表

-- =============================

-- 1.创建学生信息表Student

第2页(共19页)

-- =============================

CREATE TABLE Student

(

s_ID char(12),

-- 学号 -- 名称 -- 性别

-- 身份证号 s_Name varchar(30), s_Gender char(2), s_CardID varchar(18),

s_Class varchar(10), -- 班级编号

s_Place varchar(30), -- 籍贯

s_School varchar(10), -- 学籍

s_Birth datetime, -- 出生年月

s_National varchar(2), -- 名族编号

)

INSERT Student VALUES('200503100101','刘志成','男','12xxxxxxxxxxxx','2005031001','湖南株洲市','5','1972-05-18','01') INSERT Student VALUES('200503100102','刘津津','女','43xxxxxxxxxxxx','2005031002','湖南长沙市','4','1986-04-14','03') INSERT Student VALUES('200503100103','王咏梅','女','12xxxxxxxxxxxx','2005031003','湖南长沙市','5','1976-08-06','02') INSERT Student VALUES('200503100104','王咏梅','男','12xxxxxxxxxxxx','2005031004','广东顺德市','3','1978-04-06','05') INSERT Student VALUES('200503100105','黄蓉', '女','22xxxxxxxxxxxx','2005031005','湖北武汉市','5','1982-12-01','06')

数据库实习报告

GO

-- ==============================

-- 2.创建课程信息表Course

-- ==============================

CREATE TABLE Course (

第3页(共19页)

s_ID char(6), -- 课程编号

-- 课程名称 s_Name varchar(50),

s_Professional varchar(10), -- 专业编号

s_Results varchar(10), -- 学分

s_Classhour varchar(2), -- 总课时

s_Type varchar(2), -- 课程类型

s_Teaching varchar(2), -- 授课形式编号

)

INSERT INTO Course VALUES('031001','软件工程','0310','4','60','01','01') INSERT INTO Course VALUES('031002','媒体制作','0312','3','45','02','02') INSERT INTO Course VALUES('031003','工程制图','0311','3','48','03','03') INSERT INTO Course VALUES('031004','操作系统','0316','4','50','05','04') INSERT INTO Course VALUES('031005','电子商务','0314','4','55','06','05')

数据库实习报告

GO

-- ==============================

-- 3.创建专业信息表Professional

-- ==============================

CREATE TABLE Professional

(

g_ID char(6), -- 专业编号

-- 专业名称 g_Name varchar(50),

g_Head varchar(10), -- 专业负责人

g_Telephone varchar( 7), -- 联系电话

g_Length varchar(2), -- 学制

第4页(共19页)

g_Department varchar(2), -- 部门编号

g_Open varchar(4), -- 开设年份

)

INSERT INTO Professional VALUES('0310','软件技术','刘志成','8208290','4','01','2001') INSERT INTO Professional VALUES('0311','媒体技术','刘津津','8366131','4','02','2002') INSERT INTO Professional VALUES('0312','工程技术','王咏梅','8211360','4','03','2003') INSERT INTO Professional VALUES('0313','操作技术','刘大帅','8344532','4','04','2004') INSERT INTO Professional VALUES('0314','电子技术','黄蓉','8322520','4','05','2005')

数据库实习报告

GO

-- ==============================

-- 4.创建部门信息表Department

-- ==============================

CREATE TABLE Department

(

v_ID char(6), -- 部门编号

-- 部门名称 v_Name varchar(50),

v_Head varchar(10), -- 部门负责人

v_Telephone varchar(7), -- 联系电话

)

INSERT INTO Department VALUES('01','软件工程系','刘志成','8208290') INSERT INTO Department VALUES('02','媒体应用系','刘津津','8366131') INSERT INTO Department VALUES('03','工程信息系','王咏梅','8211360') INSERT INTO Department VALUES('04','操作应用系','刘大帅','8344532')

第5页(共19页)

INSERT INTO Department VALUES('05','电子应用系','黄蓉','8322520')

数据库实习报告

GO

-- ==============================

-- 5.创建班级信息表Class

-- ==============================

CREATE TABLE Class

(

g_ID char(6),

s_ID char(2),

v_ID char(4),

) -- 班级编号 -- 班级名称 -- 部门编号 -- 专业编号 g_Name varchar(50),

INSERT INTO Class VALUES('2005031001','软件','01','0310')

INSERT INTO Class VALUES('2005031002','媒体','02','0311')

INSERT INTO Class VALUES('2005031003','工程','03','0312')

INSERT INTO Class VALUES('2005031004','操作','04','0313')

INSERT INTO Class VALUES('2005031005','电子','05','0314') GO

第6页(共19页)

-- ==============================

-- 6.创建学生成绩信息表 Score

-- ==============================

CREATE TABLE Score

(

s_ID char(10), -- 学号

g_ID char(6), -- 课程编号

-- 正考成绩

-- 补考成绩 -- 重修成绩 g_Positive varchar(3), g_Fill char(2), g_Heavy char(2),

)

INSERT INTO Score VALUES('2005031001','031001','87','0','0') INSERT INTO Score VALUES('2005031002','031002','90','0','0') INSERT INTO Score VALUES('2005031003','031003','75','0','0') INSERT INTO Score VALUES('2005031004','031004','78','0','0') INSERT INTO Score VALUES('2005031005','031005','70','0','0' ) GO

第7页(共19页)

数据库实习报告

-- ================================ -- 7.创建管理员信息表Administrator

-- ================================ CREATE TABLE Administrator

(

u_ID varchar(2), -- 用户ID

-- 用户名称

-- 用户密码

-- 用户类型 u_Name varchar(30) , u_Type varchar(30), u_Password varchar(3),

u_Enable varchar(10), -- 启用日期 )

第8页(共19页)

数据库实习报告

INSERT INTO Administrator VALUES('1','admin','123','系统管理员','2007-2-10')

INSERT INTO Administrator VALUES('2','A类用户','123','超级用户','2007-2-10')

INSERT INTO Administrator VALUES('3','B类用户','123','普通用户','2007-2-10')

INSERT INTO Administrator VALUES('4','C类用户','123','查询用户','2007-2-10')

GO

3.视图

-- =======================================

-- 1.创建指定部门的专业信息的视图vw_Major

-- =======================================

CREATE VIEW vw_Major

AS

SELECT g_Name AS 专业名称,g_head AS 专业负责人,g_telephone AS 专业负责人联系电话,v_Name AS 所属部门名称, v_head AS 部门负责人,v_telephone AS 部门负责人联系电话,g_open AS 专业开设年份

FROM Department

-- =======================================

-- 2.创建学生成绩的视图vw_Major

-- =======================================

CREATE VIEW vw_Score

AS

SELECT s_ID AS 学号,s_Name AS 姓名,g_ID AS 课程编号,s_Name AS 课程名称,g_positive AS 正考成绩

FROM Score

第9页(共19页)

数据库实习报告

4.索引

1)在学生信息表中创建“学生名称”为关键字的非聚集索引。

CREATE UNIQUE NONCLUSTERED INDEX idx_StudentName

ON Student(s_Name)

2)在课程信息表中创建“课程名称”为关键字的唯一索引。

CREATE UNIQUE INDEX idx_CourseName

ON Course(s_Name)

3)在专业信息表中创建“专业名称”为关键字的唯一索引。

CREATE UNIQUE INDEX idx_ProfessionalName

ON Professional(g_Name)

4)在班级信息表中创建“班级名称”为关键字的唯一索引。

CREATE UNIQUE INDEX idx_ClassName

ON Class(g_Name)

5.存储过程

1)创建根据指定的学号查询学生所有课程信息的存储过程up_MyScore,并执行该存储过程查询学号为“200503100101”的学生的成绩信息。 USE StudentMis

GO

CREATE PROCEDURE up_MyScore

@type char(12)

AS

SELECT s_ID 学号,g_ID 课程编号,g_Positive 正考成绩,g_Fill 补考成绩,g_Heavy 重修成绩FROM Score WHERE s_ID=@Type

数据库实习报告

GO

2)创建根据指定的管理员信息实现添加管理员的存储过程up_AddAdmin,并执行该存储过程将管理员(8,A类用户,888,超级用户,2007-10-10)添加到管理员表中。

第10页(共19页)

USE StudentMis

GO

ALTER PROCEDURE up_AddAdmin

(

@u_ID varchar(10) OUTPUT,

@u_Name varchar(30)OUTPUT,

@u_Password varchar(10)OUTPUT,

@u_Type varchar (30) OUTPUT,

@u_Enable varchar(10) OUTPUT

)

AS

SELECT @u_ID=u_ID,@u_Name=u_Name,@u_Password=u_Password,@u_Type=u_Type,@u_Enable=u_Enable FROM Administrator

3)创建统计每门课程总成绩和平均成绩的存储过程,并将课程总成绩和平均成绩以输出参数形式输出。执行该存储过程。

USE StudentMis

GO

ALTER PROC up_Score

(

@g_Positive varchar(50) OUTPUT,

)

AS

SELECT @g_Positive=g_Positive

FROM Score

6. 触发器

1)创建在删除“学生信息表”中学生信息时,删除“学生成绩表”中该学生信息的触发器tr_DeleteStudent,并设置删除语句验证该触发器的工作。

CREATE TRIGGER tr_DeleteStudent

ON Student

FOR DELETE

AS

BEGIN

DECLARE @user VARCHAR(30)

SELECT @user=rt_Name FROM DELECT

PRINT @user+'该表已被删除'

END

2)创建在修改“部门信息表”中的部门编号时,修改“班级信息表”和“专业信息表”的触发器tr_UpdateDeptNo,并设置修改语句验证该触发器的工作。

create trigger tr_UpdateDeptNo

on Department

for update

as

begin

declare @no char(2)

select @no=Department.v_ID from Department

第11页(共19页)

update Grades

set d_ID=@no

print '班级信息表修改成功!'

update Majors

set d_ID=@no

print '专业信息表修改成功!'

数据库实习报告

end

.

(二)数据库安全策略

1)创建SQL Server登录名stuLogin,并将该登录名添加到“sysadmin”固定服务器角色中。 CREATE LOGIN[LIUZC\stuLogin]FROM StudentMis

GO

EXEC sp_addsrvrolemember 'stuLogin','sysadmin'

GO

2)创建stuLogin登录名对应的数据库用户stuUser。

USE StudentMis

GO

CREATE USER stuUser

FOR LOGIN stuLogin

GO

3)创建数据库角色stuRole,并设置stuRole拥有对StudentMis数据库的所有权限。 USE StudentMis

GO

CREATE ROLE stuRole GO

第12页(共19页)

GRANT SELECT,DELETE

ON StudentMis

TO stuRole

GO

4)将stuUser添加到该数据库角色中。

EXEC sp_addrolemember'stuUser','stuRole'

GO

5)以stuLogin登录SQL Server数据库引擎服务器。

(三)数据查询

1)查询学生信息表中的所有数据。

SELECT*

FROM

数据库实习报告

Student

2)查询部门编号“03”,专业负责人为“王咏梅”的专业信息并显示汉子标题。 SELECT*

FROM Department

WHERE v_ID='03' AND v_Head='王咏梅'

第13页(共19页)

3)查询所有年龄在20岁以下的学生的名称、籍贯和年龄。 SELECT s_Name,s_Place,s_Birth

FROM

数据库实习报告

Student

第14页(共19页)

数据库实习报告

4)查询学生名字中包含有“刘志成”的学生的详细信息,并要求按年龄升序排列。

SELECT s_ID 学号,s_Name 名称,s_Gender 性别,s_Place 籍贯,s_School 学籍,s_Birth 出生年月,s_National 名族编号

FROM Student

WHERE s_Name='刘志成'

ORDER BY s_Birth

数据库实习报告

DESC

5)查询所有“软件技术”专业的专业编号、专业名称、所属部门名称和部门负责人。

SELECT g_ID 专业编号,g_Name 专业名称,g_Department 所属部门名称

FROM Professional

第15页(共19页)

6)查询每一门课程的平均成绩,并根据平均成绩进行降序排列。

7)查询学生“黄蓉”的所有课程的成绩信息。

SELECT *

FROM Score

WHERE s_ID=

数据库实习报告

'2005031005'

第16页(共19页)

数据库实习报告

8)查询不比“黄蓉”小的学生的详细信息。

9)查询每个班级男女学生的平均年龄,并将结果保存到“t_Age”表中。

10)查询年龄到20岁以上以及班级编号为“2005031001”的学生信息(使用联合查询)。

(四)数据管理

1)在e:\data\bak文件夹中创建备份设备stubak.bak。

USE StudentMis

GO

sp_addumpdevice'disk','stubak.bak','e:\data\bak'

2)将StudentMis数据库完整备份到备份设备stubak.bak。

USE StudentMis

GO

EXEC sp_addumpdevice'disk','stubak.bak','e:\data\bak'

BACKUP DATABASE StudentMis

TO stubak.bak

3)试着删除StudentMis数据库中的一部分数据后,尝试使用完整恢复模式恢复DataBak.bak备份设备中的数据。 USE StudentMis

GO

RESTORE DATABASE StudentMis

FROM stubak.bak

4)将StudentMis数据库分离后,将对应的数据库文件复制到另一台机器中。

EXEC sp_detach_db'StudentMis'

5)在另一台计算机中,将分离后的数据库附加到SQL Server数据库引擎中。

EXEC sp_detach_db StudentMis,'e:\data\StudentMis.mdf','e:\data\StudentMis_log.ldf'

6)将StudentMis数据导出到e:\data\studentmis.xls中。

(五)数据库程序开发

1)编写根据输入学生的学号查询学生信息的Win Form程序。

2)编写显示所有课程信息的Web Form程序。

五、 存在的问题及改进

存在的问题:

1)代码关键字新颖,之前怎么接触过,难以看懂,只能死记硬背。

2)动手能力差,发现问题的能力尚缺。

3)不懂却不知道怎么问,从而导致对课程厌恶。

4)遇到错误,就选择逃避。

改进:

1)遇到不懂的,我应该多多向别人请教,多与老师沟通沟通,多看看别人是怎样操作的,学以致用。

2)多借助网络教程,多看看教程视频,从中认识更多,学到更多。

第17页(共19页)

六、 心得体会

总的来说,受益匪浅。在这些天中,我学到了很多东西,包括建表,导入数据,查询,插入。最重要的是我有机会用电脑自己进行实践,没接触的时候总是觉得它比较深奥或是不可接近的新型语言,总觉得有些心理上的陌生感。

学习数据库就和我们平时的其它科目学习一样感觉它有永无止境的知识,数据库是我在高中时候听过,到了大学渐渐了解了些,但就其原理性的内容还不知道,也就是根本就不清楚什么是数据库,只是知道一个所谓的中国字典里的名词。我认识它是从我接触实验运作开始的,刚开始就是建立数据库,两种验证模式,没什么东西但还觉得不错。进而就是操作语言了, 紧接着就是触发器的使用, 进而对数据库高级的使用等等。开始知道数据库的时候想学,不知道从何而起,不懂的话怎么问,从什么地方学起。当时感觉 SQL Sever 数据库管理既然是单独一门课程一定会讲的比较细, 也能学到真正实用的内容。 学了这门课以后发现和我想的基本是一样的,老师对学生也比较和蔼可亲,对我们要求也不是很紧。让每个人都觉得轻轻松 松就能把这门课程学完,没有多么紧张的作业,也没有太苛刻的要求。 当老师在最后说这个课程结束了, 回顾一下以前老师给我们讲过的东西, 真的有很多是我们应该去注意的。

学习完 SQL Sever 数据库后感觉可分两大块, 一块是开发, 一块是管理。 开发主要是写存储过程、触发器什么的,还有就是用 Oracle 的 Develop 工具做 form。有点类似于程序员。开发还需要有较强的逻辑思维和创造能力,自己没有真正做过,但感觉应该会比较辛苦,是青春饭;管理则需要对 SQL Sever 数据库的原理有深刻的认识,有全局操纵的能力和紧密的思维, 责任较大, 因为一个小的失误就会弄掉整个数据库,相对前者来说,后者更看重经验。这些东西都是从老师哪里和朋友的讨论中得到的心得, 也希望其他朋友能多多向老师和朋友请教,如果是个人单独靠自己来完成一个完美的数据库我觉得比较困难, 现在基本上都是团队类型的, 而且他们的效率高开发的周期也快。 由于数据库管理的责任重大,很少公司愿意请一个刚刚接触 SQL Sever 的人去管理数据库。对于我们这些初出茅庐的新手,个人认为可以先选择做管理,有一定经验后转型,去做数据库的开发。当然这个还是要看人个的实际情况来定。SQL Server 数据库的实验学习使我对数据库的有了新的进步, 以后再看到也就不至于什么也不懂,其实那么多数据库我觉得学好一门就行,只是他们的语言可能不大一样,学好一门后就可去认识其它的,这样应该有事半功倍的效果。

因此, 我感谢数据库老师给了我有用的知识, 以便我在以后学习或认识更多的内容能有新的方法和思维,也能更加有效和快速的去消化吸收新的东西。希望在今后中,SQL Server 能给我更多帮助。感谢学校开设这样一门优秀使用的课程,让我对数据库有了更深的了解。

第18页(共19页)

相关推荐