数据库实验报告.docx
《数据库实验报告.docx》由会员分享,可在线阅读,更多相关《数据库实验报告.docx(47页珍藏版)》请在冰豆网上搜索。
数据库实验报告
长沙学院
数据库实验报告
题目
数据库实验报告
系(部)
数学与计算机科学系
专业(班级)
软件工程
姓名
学号
指导教师
李妙祥
实验1:
关系数据库模式的设计
一.实验目的
通过本实验使学生掌握根据需求说明设计概念模型的方法;掌握将概念模型转化为关系模型的方法;掌握创建数据库关系图的方法。
二.实验类型设计型
三.实验学时4学时
四.实验原理及知识点
1.概念模型。
2.将概念模型转化为关系模型。
3.创建数据库。
4.创建数据表。
5.创建数据库关系图。
五.实验环境
1.硬件设备要求:
PC及其联网环境;
2.软件设备要求:
Windows操作系统;MSSQLServer数据库管理系统。
六.实验内容及步骤
假设要根据某大学的业务规则设计一个数据库,这个大学的业务规则如下:
1、该大学有多个学院:
文学院、法学院,商学院、艺术学院等。
每一个学院有一个院长,且每一位院长只能主管一个学院。
学院包括学院编号、学院名称、学院地址等信息。
院长包括院长编号、姓名、电话号码和办公室等信息。
2、每一个学院有多个系。
每一个系仅属于一个学院。
系包括系代号、系名称、电话号码和系地址等信息。
3、每一个系聘用多名教师,但每一位教师只属于一个系。
教师包括教工号、姓名、学历、职称、工资、电话号码等信息。
4、一位教师可能讲多门课,每一门课可由多位教师讲授。
课程包括课程号、课程名称、学时数和学分等信息。
5、每一个系有多名学生,且每一名学生只能属于一个系。
学生包括学号、姓名、性别、出生年月、专业、电话号码等信息。
6、每一名学生可选修多门课,且一门课有多名学生选。
实验内容及步骤:
1.根据需求说明设计某大学数据库的概念模型。
2.将概念模型转化为关系模型。
3.创建大学数据库及其相关的数据表。
4.创建大学数据库关系图。
Course表:
Dean表:
Department表:
SC表:
School表:
Student表:
TC表:
Teacher表:
数据库关系图
七.实验总结
通过这次实验我学会了初步设计一个简单的数据库,把实体所具有的属性分析出来,然后根据属性之间的关系,画出ER图最后建一个简单的数据库,感觉收获很多。
实验2:
关系数据库标准语言SQL
一.实验目的
通过本实验使学生掌握SQL语言的数据定义功能、数据查询功能和数据操纵功能。
二.实验类型验证型
三.实验学时4学时
四.实验原理及知识点
1.SQL语言的数据查询功能
2.SQL语言的数据定义功能
3.SQL语言的数据操纵功能
五.实验环境
1.硬件设备要求:
PC及其联网环境;
2.软件设备要求:
Windows操作系统;MSSQLServer数据库管理系统。
六.实验内容及步骤
在STUDENT数据库中,根据要求使用SQL语言完成下列操作,将SQL语句以.sql文件的形式保存在自己的目录下。
1.查询选修了课程的学生的学号。
2.查询学生学号和出生年份。
3.查询计算机系学生的学号、姓名。
4.查询年龄在20岁与22岁之间(包括20和22岁)的学生姓名和年龄。
5.查询学生姓名中含有“波”字的学生情况。
6.查询缺少学习成绩的学生学号和课程号。
7.查询选修C601课程的学生的学号和成绩,并按分数的降序排列。
8.求选修了课程的学生人数。
9.求课程C601的平均成绩。
10.求选修课程超过2门的学生学号。
11.查询参加学习的学生所学的课程号和总分。
12.查询选修高等数学课程且成绩在80分以上的学生的学号、姓名。
13.查询每一课程的间接先行课(即先行课的先行课)。
14.查询年龄低于所有工程系学生的学生姓名、所在系、年龄。
15.找出刘建平老师所开全部课程的课程号、课程名。
16.找出全部课程的任课教师。
17.求学生1203所学课程的总分。
18.找出所有姓张的学生的姓名和籍贯。
19.找出至少一门课程的成绩在90分以上的女学生的姓名。
20.求每一年龄上人数超过2的男生的具体人数,并按年龄从小到大排序。
21.把学生的学号及他的平均成绩定义为一个视图GRADE_VIEW。
22.创建一个从student、course、study表中查出计算机系的学生及其成绩的视图computer_view,要求显示学生的学号sno、姓名name、课程号cno、课程名称cname、成绩grade。
23.在Student表中依据学生姓名创建索引name_index。
24.在Study表中依据sno和cno创建索引main_index。
25.将课程C603的任课老师改为“赵明”。
26.在Student表中插入两个学生记录:
'1201','吴华','女',20,'成都','计算机系'
'1102','张军','男',21,'上海','工程系'
27.删除年龄在21岁以上的学生记录。
--1
SELECTDISTINCT
Sno'学号'
FROMStudent_course;
--2
SELECT
Sno'学号',
2015-Sage'出生年份'
FROMStudent;
--3
SELECT
Sno'学号',
Sname'姓名'
FROMStudent
WHERESdept='CS';
--4
SELECT
Sname'姓名',
Sage'年龄'
FROMStudent
WHERESage>=20andSage<=22;
--5
SELECT*
FROMStudent
WHERESnameLIKE'%波%';
--6
SELECT
Sno'学号',
Cno'课程号'
FROMStudent_course
WHEREGradeisNULL;
--7
SELECT
Sno'学号',
Grade'成绩'
FROMStudent_course
WHERECno='C601'
ORDERBYGradeDESC;
--8
SELECT
COUNT(DISTINCTSno)
FROMStudent_course;
--9
SELECT
AVG(Grade)
FROMStudent_course
WHERECno='C601';
--10
SELECT
Sno'学号'
FROMStudent_course
GROUPBYSno
HAVINGCOUNT(Cno)>2;
--11
SELECT
Cno'课程号',
SUM(Grade)'总分'
FROMStudent_course
GROUPBYCno;
--12
SELECT
Student.Sno,
Student.Sname
FROMStudent,Student_course,Course
WHEREStudent.Sno=Student_course.Sno
andCourse.Cno=Student_course.Cno
andCourse.Cname='高等数学'andStudent_course.Grade>80;
--13
SELECT
FIRST.Cno,
SECOND.Cpno
FROMCourseFIRST,CourseSECOND
WHEREFIRST.Cpno=SECOND.Cno;
--14
SELECT
Sname,
Sdept,
Sage
FROMStudent
WHERESage--15
SELECT
Cno'课程号',
Cname'课程名'
FROMCourse
WHERECteacher='刘剑平';
--16
SELECTDISTINCT
Cteacher'教师'
FROMCourse
WHERECteacherisnotNULL;
--17
SELECT
SUM(Grade)'总成绩'
FROMStudent_course
GROUPBYSno
HAVINGSno='201215122';
--18
SELECT
Sname'姓名',
Snative'籍贯'
FROMStudent
WHERESnamelike'张%';
--19
SELECT
Sname'姓名'
FROMStudent
WHERESsex='女'andSnoin(
SELECTSno
FROMStudent_course
WHERE90<=Grade);
--20
SELECT
Sage'年龄',
COUNT(*)'男生人数'
FROMStudent
WHERESsex='男'andSagein
(SELECT
Sage
FROMStudent
GROUPBYSage
HAVINGCOUNT(*)>=2)
GROUPBYSage
ORDERBYSage;
--21
CREATEVIEWGRADE_VIEW
AS
SELECT
Sno,
AVG(Grade)Savg
FROMStudent_course
GROUPBYSno;
--22
CREATEVIEWCOMPUTER_VIEW
AS
SELECT
Student.Sno,
Student.Sname,
Course.Cno,
Course.Cname,
Student_course.Grade
FROMStudent,Student_course,Course
WHEREStudent.Sno=Student_course.Sno
andStudent_course.Cno=Course.Cno;
--23
CREATEINDEXNAME_INDEXONStudent(Sname);
--24
CREATEINDEXMAIN_INDEXONStudent_course(Sno,Cno);
--25
UPDATECourse
SETCteacher='赵明'
WHERECno='C603';
--26
INSERT
INTOStudent
VALUES
('1201','吴华','女',20,'成都','CS'),
('1102','张军','男',21,'上海','EG');
--27
DELETE
FROMStudent
WHERESage>21;
七.实验总结
通过这次实验学会使用SQL查询语句、使用SQL语句插入元组,使用SQL语句删除元组,使用SQL语句创建索引和删除索引,但任然不是很熟练,有很多地方需要查阅书籍才能完成,还是需要多加练习。
实验3:
数据库安全性的设计与实现
一.实验目的
通过本实验使学生加深对数据库安全性的理解,并掌握数据库管理系统中有关用户、角色及操作权限的管理方法。
二.实验类型验证型
三.实验学时2学时
四.实验原理及知识点
1.安全模式的设置
2.服务器登录标识管理
3.数据库用户管理
4.权限管理
五.实验环境
1.硬件设备要求:
PC及其联网环境;
2.软件设备要求:
Windows操作系统;MSSQLServer数据库管理系统。
六.实验内容及步骤
1.使用企业管理器在你的SQLServer中创建一个登录名teacher,且
1)它使用SQLServer认证;
2)能够创建和修改数据库;
3)能访问pubs数据库、student数据库和OrderCenter数据库,并且能够在这些库中分配语句和对象权限;
4)对OrderCenter数据库中的products表具有插入、修改和删除的权限。
2.在查询分析器中使用SQL语句完成下列任务:
1)创建一个登录名student,口令为123,缺省数据库为student;
2)将其加入到student数据库的用户中;
3)将其加入到sysadmin角色中;
4)将其加入到student数据库的db_owner角色中;
5)授予他在student数据库中创建视图、创建表的权限;
6)授予他对student数据库中的study表具有所有权限,且可将这些权限授予他人;
7)撤销他对student数据库中的study表的修改权限;
8)禁止他对student数据库中的study表的删除权限。
七.实验总结
通过这次实验学会给不同的用户设置不同的角色,知道了数据库角色之间的不同,明白了数据库安全性的重要性。
实验4:
数据库完整性——约束、规则、默认
一.实验目的
通过本实验使学生加深对数据完整性的理解,熟悉通过SQL对数据进行完整性控制。
二.实验类型验证型
三.实验学时2学时
四.实验原理及知识点
1.约束2.规则3.默认
五.实验环境
1.硬件设备要求:
PC及其联网环境;
2.软件设备要求:
Windows操作系统;MSSQLServer数据库管理系统。
六.实验内容及步骤
1.将Student表中的Sno属性定义为码
2.将SC表中的Sno、Cno属性组定义为码
3.定义SC中的参照完整性
4.显示说明参照完整性的违约处理示例
5.在定义SC表时,说明Sno、Cno、Grade属性不允许取空值
6.建立部门表DEPT,要求部门名称Dname取值唯一部门编号Deptno列为主码
7.Student表的Ssex只允许取‘男’或‘女’
8.SC表的Grade的值应该在0和100之间
9.当学生性别是男时,其名字不能以Ms.打头
10.建立学生登记表Student,要求学号在90000~99999之间,姓名不能去空值,年龄小于30,性别只能是‘男’或‘女’。
11.建立教师表TEACHER,要求每个教师应发工资不低于3000元
12.去掉10Student表中的对性别的限制
13.修改Student表中的约束条件,要求学号改为在900000~999999之间,年龄由小于30改为小于40
--1
CREATETABLEStudent
(SnoCHAR(9),
SnameCHAR(20)NOTNULL,
SsexCHAR
(2),
SageSMALLINT,
SdeptCHAR(20),
PRIMARYKEY(Sno)
);
CREATETABLECourse
(CnoCHAR(4)NOTNULL,
CnameCHAR(10)NOTNULL,
CpnoCHAR(4),
CcreditSMALLINT,
PRIMARYKEY(Cno)
);
结果:
--2
CREATETABLESC
(SnoCHAR(9)NOTNULL,
CnoCHAR(4)NOTNULL,
GradeSMALLINT
PRIMARYKEY(Sno,Cno),
);
结果:
--3
CREATETABLESC
(SnoCHAR(9)NOTNULL,
CnoCHAR(4)NOTNULL,
GradeSMALLINT
PRIMARYKEY(Sno,Cno),
FOREIGNKEY(Sno)REFERENCESStudent(Sno),
FOREIGNKEY(Cno)REFERENCESCourse(Cno)
);
数据库关系图:
--4
CREATETABLESC
(SnoCHAR(9),
CnoCHAR(4),
GradeSMALLINT,
PRIMARYKEY(Sno,Cno),
FOREIGNKEY(Sno)REFERENCESStudent(Sno)
ONDELETECASCADE
ONUPDATECASCADE,
FOREIGNKEY(Cno)REFERENCESCourse(Cno)
ONDELETECASCADE
ONUPDATECASCADE
);
表的设计:
数据库关系图:
--5
CREATETABLESC
(SnoCHAR(9)NOTNULL,
CnoCHAR(9)NOTNULL,
GradeSMALLINTNOTNULL,
PRIMARYKEY(Sno,Cno),
);
表的设计:
--7
CREATETABLEStduent
(SnoCHAR(9)NOTNULL,
SnameCHAR(8)NOTNULL,
SsexCHAR
(2)CHECK(SsexIN('男','女')),
SageSMALLINT,
SdeptCHAR(20),
PRIMARYKEY(Sno)
);
表的设计:
当性别处填写’男’,’女’以外的值的时候,无法保存该元祖。
--8
CREATETABLESC
(SnoCHAR(9),
CnoCHAR(4),
GradeSMALLINTCHECK(Grade>=0ANDGrade<=100),
PRIMARYKEY(Sno,Cno),
FOREIGNKEY(Sno)REFERENCESStudent(Sno),
FOREIGNKEY(Cno)REFERENCESCourse(Cno)
);
--9
CREATETABLEStudent
(SnoCHAR(9),
SnameCHAR(8)NOTNULL,
SsexCHAR
(2),
SageSMALLINT,
SdeptCHAR(20),
PRIMARYKEY(Sno),
CHECK(Ssex='女'ORSnameNOTLIKE'MS.%')
);
--10
CREATETABLEStudent
(SnoNUMERIC(6)
CONSTRAINTC1CHECK(SnoBETWEEN90000AND99999),
SnameCHAR(20)
CONSTRAINTC2NOTNULL,
SageNUMERIC(3)
CONSTRAINTC3CHECK(Sage<30),
SsexCHAR
(2)
CONSTRAINTC4CHECK(SsexIN('男','女')),
CONSTRAINTStudentKeyPRIMARYKEY(Sno)
);
表的设计:
学号未在约束范围内:
姓名为空:
年龄不在范围内:
--11
createtableTEACHER
(Enonumeric(4)primarykey,
Enamechar(10),
Jobchar(8),
Salnumeric(7,2),
Deductnumeric(7,2),
Deptnonumeric
(2),
constraintTEACHERFKeyforeignkey(Deptno)
referencesDEPT(Deptno),
constraintC1check(sal+Deduct>=3000)
);
--12
dropconstraintC4;
--13
altertableStudent
dropconstraintC1;
altertableStudent
addconstraintC1check(Snobetween9000000and999999);
altertableStudent
dropconstraintC3;
altertableStudent
addconstraintC3check(Sage<40);
七.实验总结
通过这次实验学会了定义各种完整性约束的定义,例如不能为空,取值唯一,还有CHECK约束,学会了用constraint语句定义约束,这种方式比在create语句中直接定义完整性约束更加灵活,主要是方便增加和删除一个完整性约束条件。
实验5:
数据库编程——存储过程
一.实验目的
通过本实验使学生掌握存储过程的基本概念和创建、执行、删除方法。
二.实验类型验证型
三.实验学时2学时
四.实验原理及知识点
1.Transact-SQL编程
2.存储过程的创建和执行
3.存储过程的修改和删除
五.实验环境
1.硬件设备要求:
PC及其联网环境;
2.软件设备要求:
Windows操作系统;MSSQLServer数据库管理系统。
六.实验内容及步骤
利用存储过程实现下面的应用:
从账户1转指定数额的款项到账户2中。
假设账户关系表为Account(Accountnum,total)
存储过程
createprocedurepro_transfer
(@inAccountint,@outAccountint,@amountfloat)
as
declare@totalDepositOutfloat,
@totalDepositInfloat,
@inAccountnumint;
begin
select@totalDepositOut=(selecttotalfromAccountwhereaccountnum=@outAccount);
if(@totalDepositOutisnull)
begin
rollback;
return;
end
if(@totalDepositOut<@amount)
begin
rollback;
return;
end
select@inAccount=(selectaccountnumfromAccountwhereaccountnum=@inAccount)
if(@inAccountnumisnull)
begin
rollback;
return;
end
updateAccountsettotal=toal-@amount
whereaccountnum=@outAccount;
update