数据库实验报告00001.docx
《数据库实验报告00001.docx》由会员分享,可在线阅读,更多相关《数据库实验报告00001.docx(39页珍藏版)》请在冰豆网上搜索。
![数据库实验报告00001.docx](https://file1.bdocx.com/fileroot1/2023-6/30/aecdee1d-d65f-46de-af86-69c7a800ad3a/aecdee1d-d65f-46de-af86-69c7a800ad3a1.gif)
数据库实验报告00001
数据库实验报告
《数据库应用实践》课程报告
学号:
陈泽泽
姓名:
031202110
年级:
2012级
学院:
数计学院
专业:
计算机实验班
本组其它成员:
学号031202127姓名姜晓健
实验时间:
2013-2014学年第二学期
任课教师:
白清源
《数据库应用实践》实验一:
数据库管理系统及其应用开发环境的创建使用
一、实验目的:
了解数据库应用开发环境的建立与使用;掌握SQL语言的使用;通过实践理解关系数据模型的相关概念;掌握数据库应用开发环境的使用;掌握创建、删除数据库的方法;掌握创建基本表、查看表属性、修改属性的方法;掌握向表中添加、删除以及修改数据的方法;掌握查询分析器的使用方法;掌握SELECT语句在单表查询中的应用;掌握复杂查询、多表查询的方法;掌握视图的使用方法;巩固数据库的基础知识。
二、实验环境:
操作系统:
win7(32位)
数据库管理系统:
SQLServer2012
三、实验内容:
应用背景:
实现对供应商、配件与工程项目之间的数据管理
设计的数据库名:
SPJ数据库
所设计的各张表结构说明,各表之间关系图说明
s(sno,sname,statu,city)
p(pno,pname,color)
j(jno,name,city)
spj(sno,pno,qty)
供应商表s由供应商代码(sno)、供应商姓名(sname)、供应商状态(statu)、供应商所在城市(city)组成。
零件表p由零件代码(pno)、零件名(pname)、颜色(color)重量(weight)组成。
工程项目表j由工程项目代码(jno),工程项目名(jname)、工程项目所在城市(city)。
供应商表spj由供应商代码(sno),零件代码(pno)、工程项目代码(jno)、供应数量(qty)组成,表示某供应商供应某种零件给某项工程的数量qty。
1.依据前面实验一实验内容
(2),(3)的要求,写出实现相应操作的SQL语句并给出运行结果的截图。
创建数据库:
创建S表:
创建SPJ表:
创建索引对象:
查看索引:
插入数据:
单表查询
多表连接查询并排序输出
3、使用聚集函数的查询。
4、分组查询。
5、嵌套查询。
6、创建并查询视图。
四.实验小结
本次实验,我从SQL安装一步步实践做起,让我对SQLServer数据库的基本操作有了进一步的了解,对课堂书本理论知识的理解更深一步。
特别是当我遇到表的修改问题时,刚开始自己无法解决,接着我从相关的参考书和网上寻找答案,这种解决问题的能力的养成,为今后的数据库的学习奠定了基础。
《数据库应用实践》实验二:
数据库管理系统的维护与管理
学号:
031202110姓名:
陈泽泽Email:
chzeze@学院:
数计学院专业:
计算机类
一、实验目的:
1、掌握DBMS提供的数据库用户和权限管理机制;
2、理解存储过程概念,掌握存储过程与触发器的使用;
3、掌握数据库备份与恢复方法。
二、实验环境:
操作系统:
Window7(32位)
数据库管理系统:
SQLServer2012
三、实验内容:
(1)数据库安全性:
1、DBMS登录帐号管理:
添加登陆用户:
sp_addlogin创建新的Microsoft®SQLServer™登录,使用户得以连接使用SQLServer身份验证的SQLServer实例,并且向该用户授予访问数计库的权限,如下:
接着可以用新添加的用户名访问数据库:
2、对数据库用户进行权限、收回权限。
在T-SQL中设置权限可使用GRANT(授予)、DENY(拒绝)及REVOKE(撒销)三个语句,
这三个语句的用法非常多,基本形式如下:
GRANTALL或权限名称ON对象TO用户或角色名称WITH选项
REVOKEALL或权限名称ON对象TO用户或角色名称CASCADE
DENYALL或权限名称ON对象TO用户或角色名称CASCADE
每一语句都有三个元素,分别是权限名称、对象及用户(角色),如下
权限授予的管理,把查询s表的权限授予用户zeze,即改用户有权限查询s表:
回收权限管理,回收查询s表的权限,即用户zeze不能查询s表:
由于可用权限非常多,在T-SQL中没有选项可供选择,所以使用GRANT、DENY及
REVOKE时,必须首先知道权限名称才能进行设置。
(2)触发器,存储过程的使用
1、存储过程的创建、执行与管理
存储过程的优点:
(1)执行速度快。
存储过程创建是就已经通过语法检查和性能优化,在执行时无需每次编译。
存储在数据库服务器,性能高。
(2)允许模块化设计。
只需创建存储过程一次并将其存储在数据库中,以后即可在程序中调用该过程任意次。
存储过程可由在数据库编程方面有专长的人员创建,并可独立于程序源代码而单独修改。
(3)提高系统安全性。
可将存储过程作为用户存取数据的管道。
可以限制用户对数据表的存取权限,建立特定的存储过程供用户使用,完成对数据的访问。
存储过程的定义文本可以被加密,使用户不能查看其内容。
(4)减少网络流量:
一个需要数百行Transact-SQL代码的操作由一条执行过程代码的单独语句就可实现,而不需要在网络中发送数百行代码。
定义存储过程的语法
CREATEPROC[EDURE]存储过程名
@参数1数据类型=默认值,
……,
@参数n数据类型OUTPUT
AS
SQL语句
GO
和C语言的函数一样,参数可选
参数分为输入参数、输出参数
输入参数允许有默认值
例如:
调用存储过程
EXECUTE(执行)语句用来调用存储过程
调用的语法
EXEC过程名[参数]
修改,更新存储:
语法:
UPDATE|UPDATA表名称SET列名称=新值WHERE列名称=某值
例如:
2、触发器的创建与管理。
触发器的类型:
INSERT触发器:
当向表中插入数据时触发,自动执行触发器所定义的SQL语句。
UPDATE触发器:
当更新表中某列多列时触发,自动执行触发器所定义的SQL语句。
DELETE触发器:
当删除表中记录时触发,自动执行触发器所定义的SQL语句
serted和deleted表
触发器触发时:
1、系统自动在内存中创建deleted表或inserted表
2、只读,不允许修改;触发器执行完成后,自动删除
inserted表
1、临时保存了插入或更新后的记录行
2、可以从inserted表中检查插入的数据是否满足业务需求
3、如果不满足,则向用户报告错误消息,并回滚插入操作
deleted表
1、临时保存了删除或更新前的记录行
2、可以从deleted表中检查被删除的数据是否满足业务需求
3、如果不满足,则向用户报告错误消息,并回滚插入操作
创建触发器的语法:
CREATETRIGGERtrigger_name
ONtable_name
[WITHENCRYPTION]
FOR[DELETE,INSERT,UPDATE]
AS
T-SQL语句
GO
WITHENCRYPTION表示加密触发器定义的SQL文本
DELETE,INSERT,UPDATE指定触发器的类型
insert触发器的工作原理:
1.执行insert插入语句,在表中插入数据行;
2.触发insert触发器,向系统临时表inserted表中插入新行的备份(副本)
3.触发器检查inserted表中插入的新行数据,确定是否需要回滚或执行其他操作。
例如下,创建触发器:
但插入数据时,调用触发器,效果如下:
(3)数据库备份与恢复
1、对所创建的数据库进行完整、差异、日志备份
(1)完整备份使用BACKUPDATABASE语句实现完整备份。
语法格式如下:
BACKUPDATABASE数据库名
TO<备份设备>[,...n]
[WITH{INIT或NOINIT}]
参数说明:
*INIT或NOINIT:
INIT表示新备份的数据覆盖当前备份设备上的每一项内容;NOINIT表示新备份的数据添加到备份设备上已有内容的后面。
>>>完整备份教务管理系统数据库,创建用于存放教务管理系统数据库完整备份的逻辑备份设备DiskBKJWGL:
--完整备份spj到d:
/test中,截图如下:
(2)差异备份
使用BACKUPDATABASE语句对数据库创建差异备份与创建完整备份类似,除了执行BACKUPDATABASE语句时需要指定要备份的数据库名称和写入完整备份的备份设备以外,还需使用WITHDIFFERENTIAL参数来标明执行的是一个差异备份。
>>>创建教务管理系统数据库的差异备份。
BACKUPDATABASE教务管理系统TODiskBKJWGLWITHDIFFERENTIAL
(3)备份事务日志
可以使用BACKUPLOG语句实现事务日志备份。
语法格式如下:
BACKUPLOG数据库名
TO<备份设备>[,...n]
WITH[INIT/NOINIT]
2、数据库恢复:
恢复备份好的数据库,运行如下:
四、实验小结:
SQL Server数据库的实验二使我对数据库的有了新的进步,以后再看到也就不至于什么也不懂,其实那么多数据库我觉得学好一门就行,只是他们的语言可能不大一样,学好一门后就可去认识其它的,这样应该有事半功倍的效果。
就像我学习C语言,当时不能说是学习的棒,但不算差。
所以我对以后的语言感觉都不是很困难,了解了VB、C++还有网页中用的Html语言、asp语言都能看懂,起码可以对别人的东西进行了一下修改。
因此,我感谢数据库老师给了我有用的知识,以便我在以后学习或认识更多的内容能有新的方法和思维,也能更加有效和快速的去消化吸收新的东西。
希望在今后中,SQL Server能给我更多帮助。
感谢学校开设这样一门优秀使用的课程,让我对数据库有了更深的了解。
《数据库应用实践》实验三:
数据库应用系统的开发
一、实验目的:
初步掌握数据库应用系统分析设计的基本方法;进一步提高分析与解决问题
的综合能力;初步掌握数据库建模工具的使用方法;熟悉掌握C/S或B/S结构的
数据库应用系统开发的整个过程。
二、实验环境:
操作系统:
32位Win7
数据库管理系统:
SQLServer2005
系统设计与开发工具:
VS2010
系统开发语言:
C#、ASP.NET
三、实验内容:
运用数据库基础知识,在数据库应用环境下,完成一个具体的数据库应用系统的分析、设计与实现。
针对设计任务利用建模工具(Rose、PowerDesigner等)进行数据库建模,在使用SQLserver基础上,利用一种应用开发工具(PHP、VC、java等)设计实现一个数据库应用系统。
要求能实现对数据库中数据的插入、删除、修改、查询、统计等功能,做到界面友好、使用方便。
所建的数据库表至少满足第三范式,掌握应用系统与数据库相连方法,掌握程序访问数据库中数据的技术方法,进一步提高分析与解决问题的综合能力。
一、系统选题:
大学在线考试系统
二、需求说明
1.操作简单方便,界面简洁美观。
2.具有实时性,已注册的用户无论身在何地,通过Internet游览器,都可登录网络考试系统。
3.系统提供的自动交卷功能使考试到结束时间时,系统自动交卷。
4.提供考试时间倒计时功能,让考生随时了解考试剩余时间。
5.系统自动阅卷,保证成绩真实,准确。
6.考生可以随时查看考试成绩
三、系统概要设计及概念数据模型(E-R图)设计
系统功能模块如图:
学生用例图:
管理员用例图:
四、系统详细设计及数据库表结构设计
逻辑结构设计:
类和关系模型向关系模式转化:
1.考生信息表(学号,姓名,密码,性别,密码问题,答案,专业,加入时间)
2.单选题信息表(题目编号,课程编号,题名,选项A,选项B,选项C,选项D,正确答案)
3.多选题信息表(题目编号,课程编号,题名,选项A,选项B,选项C,选项D,正确答案)
4.判断题信息表(题目编号,课程编号,题目,正确答案)
5.专业信息表(专业编号,专业名,加入时间)
6.考试科目表(课程编号,课程名)
7.管理员信息表(管理员编号,管理员名称,密码,加入时间)
Course表
tb_TaoTi表
tb_Student表
tb_Profession表
tb_Administrator表
SingleProblem表
Score表
MultiProblem表
JudgeProblem表
tb_TaoTiDetail表
类图
物理结构设计
(1).为关系模式选择存取方法:
选择索引方法
(2).确定数据库的存储结构
为了提高系统性能,将表和索引放在不同的磁盘上。
系统配置使用默认值。
完整性设计
1.实体完整性:
Course表中ID设为主键并且为自增长identity(1,1)
JudgeProblem表中ID设为主键并且为自增长identity(1,1)
MultiProblem表中ID设为主键并且为自增长identity(1,1)
Sorce表中ID设为主键并且为自增长identity(1,1)
SingleProblem表中ID设为主键并且为自增长identity(1,1)
tb_Administrator表中ID设为主键
tb_Profession表中ID设为主键并且为自增长identity(1,1)
tb_Student表中ID设为主键
tb_TaoTi表中ID设为主键并且为自增长identity(1,1)
tb_TaoTiDetail表中ID设为主键并且为自增长identity(1,1)
2.,参照完整性:
JudgeProblem表中:
foreignkeyCourseIDreferencesCourse(ID)
MultiProblem表中:
foreignkeyCourseIDreferencesCourse(ID)
Sorce表中:
foreignkeyUserIDreferencestb_Student(ID)
foreignkeyPaperIDreferencestb_TaoTi(ID)
SingleProblem表中:
foreignkeyCourseIDreferencesCourse(ID)
tb_Student表中:
foreignkeyprofessionreferencestb_Profession(Name)
tb_TaoTi表中:
foreignkeyCourseIDreferencesCourse(ID)
tb_TaoTiDetail表中:
foreignkeyPaperIDreferencestb_TaoTi(ID)
用户定义完整性:
列值非空(notnull)如上表图所示
CHECK(SexIN('男','女'))
用户权限设计
1.创建成绩视图供管理员和考生查看成绩
存储过程设计
(1)Proc_JudgeProblemDetail判断题详细信息
CREATEPROCEDURE[dbo].[Proc_JudgeProblemDetail]
@ID[int]
ASSELECT*
FROM[dbo].[JudgeProblem]
whereID=@ID
(2)Proc_JudgeProblemModify判断题修改
CREATEPROCEDURE[dbo].[Proc_JudgeProblemModify]
(@ID[int],
@CourseID[int],
@Title[varchar](1000),
@Answer[bit])
ASUPDATE[Examination].[dbo].[JudgeProblem]
SET[CourseID]=@CourseID,
[Title]=@Title,
[Answer]=@Answer
WHERE
([ID]=@ID)
(3)Proc_MultiProblemDetail多选题详细信息
CREATEPROCEDURE[dbo].[Proc_MultiProblemDetail]
@ID[int]
ASSELECT*
FROM[dbo].[MultiProblem]
whereID=@ID
4)Proc_MultiProblemModify多选题修改
CREATEPROCEDURE[dbo].[Proc_MultiProblemModify]
(@ID[int],
@CourseID[int],
@Title[varchar](1000),
@AnswerA[varchar](500),
@AnswerB[varchar](500),
@AnswerC[varchar](500),
@AnswerD[varchar](500),
@Answer[varchar](50))
ASUPDATE[Examination].[dbo].[MultiProblem]
SET[CourseID]=@CourseID,
[Title]=@Title,
[AnswerA]=@AnswerA,
[AnswerB]=@AnswerB,
[AnswerC]=@AnswerC,
[AnswerD]=@AnswerD,
[Answer]=@Answer
WHERE
([ID]=@ID)
(5)Proc_PaperDetail试卷信息
(6)Proc_PaperModify试卷修改
CREATEPROCEDURE[dbo].[Proc_PaperModify]
(@PaperID[int],
@PaperState[bit])
ASUPDATE[Examination].[dbo].[tb_TaoTi]
SET[PaperState]=@PaperState
WHERE
([PaperID]=@PaperID)
(7)Proc_ScoreAdd分数插入
CREATEPROCEDURE[dbo].[Proc_ScoreAdd]
(@UserID[varchar](20),
@PaperID[int],
@Score[int])
ASINSERTINTO[Examination].[dbo].[Score]
([UserID],
[PaperID],
[Score])
VALUES
(@UserID,
@PaperID,
@Score)
(8)Proc_SingleProblemDetail单选题信息
CREATEPROCEDURE[dbo].[Proc_SingleProblemDetail]
@ID[int]
ASSELECT*
FROM[dbo].[SingleProblem]
whereID=@ID
(9)Proc_SingleProblemModify单选题修改
CREATEPROCEDURE[dbo].[Proc_SingleProblemModify]
(@ID[int],
@CourseID[int],
@Title[varchar](1000),
@AnswerA[varchar](500),
@AnswerB[varchar](500),
@AnswerC[varchar](500),
@AnswerD[varchar](500),
@Answer[varchar]
(2))
ASUPDATE[Examination].[dbo].[SingleProblem]
SET[CourseID]=@CourseID,
[Title]=@Title,
[AnswerA]=@AnswerA,
[AnswerB]=@AnswerB,
[AnswerC]=@AnswerC,
[AnswerD]=@AnswerD,
[Answer]=@Answer
WHERE
([ID]=@ID)
数据访问类设计
数据访问类为Datacon.cs,包括getcon(),bind()等方法,用于数据连接和数据绑定。
publicclassDatacon
{
publicSqlConnectiongetcon()
{
stringstrCon="server=JW-PC;database=Examination;IntegratedSecurity=True";
SqlConnectionsqlCon=newSqlConnection(strCon);
returnsqlCon;
}
publicbooleccom(stringsqlstr)
{
SqlConnectioncn=this.getcon();
cn.Open();
SqlCommandcmd=newSqlCommand(sqlstr,cn);
try
{
cmd.ExecuteNonQuery();
returntrue;
}
catch
{
returnfalse;
}
finally
{
cn.Close();
}
}
publicSqlParameterMakeInParam(stringParamName,SqlDbTypeDbType,intSize,objectValue)
{
returnMakeParam(ParamName,DbType,Size,ParameterDirection.Input,Value);
}
publicvoidbind(GridViewgv,stringsqlstr)
{
SqlConnectioncn=this.getcon();
cn.Open();
SqlDataAdaptermydata=newSqlDataAdapter(sqlstr,cn);
DataSetmydataset=newDataSet