电子科技大学 数据库系统及应用实验报告.docx
《电子科技大学 数据库系统及应用实验报告.docx》由会员分享,可在线阅读,更多相关《电子科技大学 数据库系统及应用实验报告.docx(33页珍藏版)》请在冰豆网上搜索。
![电子科技大学 数据库系统及应用实验报告.docx](https://file1.bdocx.com/fileroot1/2023-2/26/403333d9-729a-4b26-8729-4f1cbd095be4/403333d9-729a-4b26-8729-4f1cbd095be41.gif)
电子科技大学数据库系统及应用实验报告
计算机专业类课程
实验报告
课程名称:
数据库系统及应用
学 院:
计算机科学与工程学院
专 业:
计算机科学与技术
学生姓名:
朋施羽
学 号:
指导教师:
日 期:
2014年4月21 日
电子科技大学
实验报告
实验一
1、实验名称:
创建数据库
2、实验学时:
4
3、实验内容和目的:
实验内容:
(1)启动SQLSERVER
(2)创建数据库:
STUD
(3)创建表
(4)插入样本数据
(5)备份数据库
(6)恢复数据库
“系别代码表“表名:
dep
“教师表”表名:
teacher
“学生表”表名:
student
“课程表”表名:
course
“选课表”表名:
sc
为每个表准备大约10记录,使用Insert语句将这些数据插入到相应表中数据录入完成后,将数据库备份到磁盘上,在以后的的试验中备用。
实验目的:
本实验要求学生掌握创建数据库的方法及相关操作,创建数据库,向数据库中添加样本数据,学习SQLSERVER数据库的恢复和备份。
4、实验原理:
使用数据库管理系统DB、DDL创建数据库及数据库对象。
5、实验器材(设备、元器件)
操作系统:
Win7
数据库:
MSSQLSERVER
6、实验步骤:
(1)创建数据库:
STUD
Createdatabasestud;
(2)创建表,表的详细说明见表格.
“系别代码表“ 表名:
dep
其结构如下:
(该表的主键为“系代码”)
字段名称
字段类型
字段大小/格式
是否可为空
约束条件
系代码depid
VARCHAR
8
否
PK
系名depname
VARCHAR
20
否
Notnull
“教师表”表名:
teacher
其结构如下:
(该表的主键为“教师号”)
字段名称
字段类型
字段大小/格式
是否可为空
约束条件
教师号tid
VARCHAR
8
否
PK
教师名tname
VARCHAR
8
否
Notnull
职称title
VARCHAR
8
是
所属院系编号depid
VARCHAR
8
是
“学生表”表名:
student
其结构如下:
(该表的主键为“学生号”)
字段名称
字段类型
字段大小/格式
是否可为空
约束条件
学号sid
VARCHAR
11
否
PK
学生名sname
VARCHAR
8
否
Notnull
院系编号depid
VARCHAR
8
是
性别sex
VARCHAR
2
否
出生年月birthd
DATETIME
是
邮箱semail
VARCHAR
20
是
家庭地址homeaddr
VARCHAR
40
是
“课程表”表名:
course
其结构如下:
(该表的主键是课程号)
字段名称
字段类型
字段大小/格式
是否可为空
约束条件
课程号cid
VARCHAR
8
否
PK
课程名cname
VARCHAR
30
否
Notnull
学分credits
DECIMAL
3,1(小数位数1)
否
Notnull
“选课表”表名:
sc
其结构如下:
(该表的主键是课程号)
字段名称
字段类型
字段大小/格式
是否可为空
约束条件
学号sid
VARCHAR
11
否
Notnull,PK
课程号cid
VARCHAR
8
否
Notnull,PK
教师号tid
VARCHAR
8
否
Notnull
成绩score
DECIMAL
3,1(小数位数1)
是
(3)备份数据库
BACKUPDATABASEstudTODISK='d:
\stud.bak'WITHINIT;
(4)恢复数据库
RESTOREDATABASEstudFROMDISK='d:
\stud.bak'WITHREPLACE;
7、实验数据及结果分析:
(1)启动SQLSERVER
(2)创建数据库:
STUD
createdatabasestud;
(3)创建表
代码:
usestud;
createtabledep(depidvarchar(8)primarykey,depnamevarchar(20)notnull);
createtableteacher(tidvarchar(8)primarykey,tnamevarchar(8)notnull,titlevarchar(8),depidvarchar(8));
createtablestudent(sidvarchar(11)primarykey,snamevarchar(8)notnull,depidvarchar(8),sexvarchar
(2)notnull,birthddatetime,semailvarchar(20),homeaddrvarchar(40));
createtablecourse(cidvarchar(8)primarykey,cnamevarchar(30)notnull,creditsdecimal(3,1)notnull);
createtablesc(sidvarchar(11)notnull,cidvarchar(8)notnull,tidvarchar(8)notnull,scoredecimal(3,1),primarykey(sid,cid));
截图:
图1-1创建的数据库和表
(4)插入样本数据
代码:
insertintoteachervalues('6012','熊教授','教授','601'),('6021','刘教授','教授','602'),('6032','盖茨','副教授','603'),('6074','汤米','讲师','604'),('6059','王淑娟','教授','609'),('6033','蒋亚辉','讲师','610'),('6097','任慧磊','讲师','607'),('6014','徐叉叉','副教授','608'),('6082','段梅梅','讲师','606'),('6053','杨晓','副教授','605');
insertintostudentvalues('2406010101','张三','男','601','1981/8/8','23534@','沙河庙'),('2406010102','张四','男','601','1982/1/1','23234@','大美路'),('2406010103','张五','女','601','1983/2/2','dfei@','清水河'),('2406020101','王三','男','602','1984/12/12','isfi@','保研路'),('2406020102','王四','男','602','1985/6/6','io@','银杏路');
insertintostudent(sid,sname,sex,depid,birthd)values('2406030101','李六','男','603','1986/9/9'),('2406040101','王二','女','604','1981/3/9'),('2406050101','蒋二','女','605','1982/4/9'),('2406090101','段三','男','609','1986/9/23'),('2406080101','秦四','男','608','1982/8/14');
insertintocoursevalues('1','计算机组成原理','4'),('2','数据结构','4'),('3','数据库','2'),('4','微积分','6'),('5','数学实验','2'),('6','大学英语','4'),('7','计算机操作系统','4.5'),('8','计算机系统结构','2.5'),('9','嵌入式系统及应用','3'),('10','编译原理','4');
insertintosc(sid,cid,tid)values('2406010101','1','6012'),('2406010102','1','6012'),('2406010103','1','6012'),('2406020101','1','6012'),('2406020102','1','6012'),('2406030101','1','6012'),('2406010101','2','6021'),('2406010102','2','6021'),('2406010103','2','6021'),('2406020101','2','6021'),('2406020102','2','6021'),('2406030101','2','6021'),('2406010101','3','6032'),('2406010102','3','6032'),('2406010103','3','6032'),('2406020101','3','6032'),('2406020102','3','6032'),('2406030101','3','6032'),('2406010103','4','6074'),('2406010103','5','6033'),('2406010103','6','6057'),('2406010103','7','6053'),('2406010103','8','6014'),('2406010103','9','6097'),('2406010103','10','6059');
截图:
图1-2插入数据后的teacher表
图1-3插入数据后的dep表
图1-4插入数据后的course表
图1-5插入数据后的sc表
图1-6插入数据后的student表
(5)备份数据库
backupdatabasestudtodisk='d:
\stud.bak'withinit;
图1-7备份数据库后产生的文件
(6)恢复数据库
restoredatabasestudfromdisk='e:
\stud.bak'withreplace;
8、实验结论、心得体会和改进建议:
最后成功建数据库、建表,并在表中插入了数据。
了解到,在SqlServer中若要在某个数据库中插入数据,首先要新建该数据库的查询,或者使用ues<数据库名>该条语句,否则可能会自动创建到系统数据库中。
同时,插入数据的时候要注意顺序,如果某表中有外键,则应该先向其参考的被参考表中插入数据。
电子科技大学
实验报告
实验二
1、实验名称:
数据库的完整性
2、实验学时:
4
3、实验内容和目的:
实验内容:
设置约束条件
●设置教师表,学生表中的院系字段(depid)的外键约束
●设置选课表的三个外键约束(学号,课程号,教师号)
●设置选课表中成绩字段的取值范围是0到100
●设置学生表中性别字段的取值为 “男”或“女”
●设置学生表电子邮件字段的取值必须包含@符号
实验目的:
通过设置表的检查约束、外键约束体会数据库完整性的含义,约束条件下数据修改操作的限制,以及实现修改操作的技巧。
4、实验原理:
数据库库的完整性、约束条件、结构化查询语言。
5、实验器材(设备、元器件)
操作系统:
Win7
数据库:
MSSQLSERVER
6、实验步骤:
(1)恢复数据库,将数据库备份stud恢复到DB2中
(2)执行SQL命令完成实验内容
(3)备份数据库
7、实验数据及结果分析:
(1)恢复数据库,将数据库备份stud恢复到DB2中
BACKUPDATABASEstudTODISK='d:
\stud.bak'WITHINIT;
(2)执行SQL命令完成实验内容
●设置教师表,学生表中的院系字段(depid)的外键约束
altertableteacheraddforeignkey(depid)referencesdep(depid);
altertablestudentaddforeignkey(depid)referencesdep(depid);
图2-1teacher表的外键约束
图2-2student表的外键约束
●设置选课表的三个外键约束(学号,课程号,教师号)
altertablescaddforeignkey(sid)referencesstudent(sid);
altertablescaddforeignkey(cid)referencescourse(cid);
altertablescaddforeignkey(tid)referencesteacher(tid);
●设置选课表中成绩字段的取值范围是0到100
altertablescaddcheck(score>=0andscore<=100);
图2-3sc表的外键约束和check约束
●设置学生表中性别字段的取值为 “男”或“女”
altertablestudentaddcheck(sexin('男','女'));
●设置学生表电子邮件字段的取值必须包含@符号
altertablestudentaddcheck(semaillike'%@%');
图2-4student表的check约束
(3)备份数据库
RESTOREDATABASEstudFROMDISK='d:
\stud.bak'WITHREPLACE;
八、实验结论、心得体会和改进建议:
成功的为表添加约束,同时应该注意,可以灵活的使用通配符来达到要求。
这里提出一点改进建议,在添加约束的时候,可以考虑为其取名,方便下次修改。
电子科技大学
实验报告
实验三
1、实验名称:
数据查询
2、实验学时:
4
3、实验内容和目的:
实验内容:
(1)查询年龄在20—22之间的学生姓名(通过出生日期和当前日期计算年龄)year(getdate())-year(birthd)
(2)查询所有副教授的信息
(3)查询姓“张”的学生的学号、姓名、邮件地址
(4)求每门课程的选课人数、最高分、最低分、平均分,要求在查询结果中显示课程号和课程名;
(5)查询既选修了1号课程,又选修了2号课程的学生学号
(6)查询既选修了1号课程,又选修了2号课程的学生姓名
(7)查询选修了全部课程的学生姓名
实验目的:
练习用SELECT查询语句,设置查询条件,实现单表查询。
练习使用SELECT语句从多个表中查询数据,表的内连接、左外连接、右外连接的使用以及设置连接条件,理解连接条件和查询条件的在目的和功能上的区别。
4、实验原理:
结构化查询语言、表的连接、关系运算、分组查询
5、实验器材(设备、元器件)
操作系统:
Win7
数据库:
MSSQLSERVER
6、实验步骤:
(1)恢复数据库,将数据库备份stud恢复到DB2中
(2)执行SQL命令完成实验内容
七、实验数据及结果分析:
(1)恢复数据库,将数据库备份stud恢复到DB2中
BACKUPDATABASEstudTODISK='d:
\stud.bak'WITHINIT;
(2)执行SQL命令完成实验内容
●查询年龄在20—22之间的学生姓名(通过出生日期和当前日期计算年龄)year(getdate())-year(birthd)
selectsnamefromstudentwhereyear(getdate())-year(birthd)between20and22;
图3-120-22岁学生姓名的查询结果
●查询所有副教授的信息
select*fromteacherwheretitlelike'副教授';
图3-2副教授信息的查询结果
●查询姓“张”的学生的学号、姓名、邮件地址
selectsid学号,sname姓名,semail邮件地址fromstudentwheresnamelike'张%';
图3-3张姓同学的信息查询结果
●求每门课程的选课人数、最高分、最低分、平均分,要求在查询结果中显示课程号和课程名;
selectcourse.cid课程号,cname课程名,count(*)选课人数,max(score)最高分,min(score)最低分,avg(score)平均分fromcourse,scwherecourse.cid=sc.cidgroupbycourse.cid,cname;
图3-4各门课程的查询结果
●查询既选修了1号课程,又选修了2号课程的学生学号
selecta.sidfromsca,scbwherea.sid=b.sidanda.cid='1'andb.cid='2';
图3-5选修了1号课程和2号课程学生的学号
●查询既选修了1号课程,又选修了2号课程的学生姓名
selectsnamefromstudent,sca,scbwherea.cid='1'andb.cid='2'anda.sid=b.sidanda.sid=student.sid;
图3-6选修了1号课程和2号课程学生的姓名
●查询选修了全部课程的学生姓名
selectsnamefromstudentwherenotexists(select*fromcoursewherenotexists(select*fromscwheresc.cid=course.cidandstudent.sid=sc.sid));
图3-7选修了全部课程的学生姓名
八、实验结论、心得体会和改进建议:
成功查找出结果,在查找的过程中灵活的运用连接非常方便。
并且在能用连接的时候尽量不要用子查询,因为连接的速度通常要比子查询快。
在最后一个查询选修了全部课程的学生名单的时候,运用了两个notexists相当于双重否定,得到了结果。
查询的时候,适当给列取别名,可以使得查询结果更加清晰明白。
电子科技大学
实验报告
实验四
1、实验名称:
数据库建模
2、实验学时:
4
3、实验内容和目的:
实验内容:
(1)使用PDM,以图形化界面方式创建表及确定各表之间的关系,在实验报告中给出模型图;
(2)通过“生成数据库”功能生成创建数据库的脚本,在实验报告中给出脚本内容;
实验目的:
本实验要求学生学习数据库建模工具PowerDesigner的使用方法,掌握最基本的使用方法。
4、实验原理:
使用图形化CASE工具设计数据库,ER图
5、实验器材(设备、元器件)
操作系统:
Win7
应用软件:
PowerDesigner15.1
6、实验步骤:
1.通过生成PhysicalDataModel(PDM)以图形化界面创建表及确定各表之间的关系。
(1)打开了PD以后,选择New,并在Modeltype里面选择PhysicalDataModel,同时选择可使用的DBMS,如DB2或MySQL4.0,然后点击确定,如图1所示。
图1
(2)从Palette工具面板中单击创建Table的工具图标,并在图表窗口中点击一下便可产生一个新的Table(默认名称为Table_1,可修改该名称),如图2所示:
图2
(3)选中该表,右击选择”Properties”对该表进行编辑(修改名称、增加列等)如图3所示:
图3
(4)选择”Columns”标签,如图3中的红色矩形所示。
便可以给student这个表添加列了。
在添中列的时候应该指明列的类型,并指是否允许为空,是否为主键等各种属性,如图4所示:
图4
(5)按生成student表同样的办法生成department表,只是具体属性不一样,如图5所示:
图5
(6)学生表中的学生所在系是department表中的一个外键,这时我们需要建立一个表的引用。
如图6所示:
图6
(7)这时候可以发现student表中多了一个dno字段,并且有这种外键标识 ,这样表也就建好了。
2.根据第一步生成的表导出数据库的脚本
要产生数据库生成脚本,进行如下操作:
(1)选择Database→GenerateDatabase,打开“ParametersforSybaseSQLAnywhere”窗口(图7)。
(2)在Filename框中接受缺省的文件名crebas.sql,在Directory框中接受缺省的目录名。
(3)接受其它缺省的生成参数和选项。
图7
(4)单击“Generatescript”按钮,打开如图8所示的确认框。
图8
(5)单击“是(Y)”按钮。
(6)打开数据库生成脚本文件,并浏览这个文件。
这个脚本文件就是我们通过图形化的界面创建的表及其之间的关系的一个SQL描述,我们可以在应用程序中或者相应的DBMS导入这个脚本就可以完成数据库的创建了(在例子中的这个脚本只有表相关的创建语句)。
3.利用PD的逆向工程生成PDM并进行修改
逆向工程的实验我们以从数据库生成脚本生成PDM为例。
从数据库生成脚本生成PDM,按下列步骤进行:
(1)选择File→ReverseEngineering→Database”窗口。
新窗口如图9所示:
图9
(2)从“Databasename”下拉列表框中选择数据库管理系统。
如图9的红圈所示,并点击确定。
(3)单击“Usingascriptfile”单选按钮,并添加一个SQL脚本文件,如图10所示:
图10
(4)单击“OK”,新的PDM出现在窗口中,如图11所示:
这时可按照步骤1介绍的方法进行图形化界面的修改,并生成新的SQL脚本文件。
7、实验数据及结果分析:
(1)通过生成PhysicalDataModel(PDM)以图形化界面创建表及确定各表之间的关系。
图4-1用PDM得到的模型图
(2)根据第一步生成的表导出数据库的脚本
图4-2得到的数据库脚本,并且用SqlServer打开
得到的脚本内容如下:
/*=======================