数据库实验报告.docx
- 文档编号:8864736
- 上传时间:2023-02-02
- 格式:DOCX
- 页数:17
- 大小:121.49KB
数据库实验报告.docx
《数据库实验报告.docx》由会员分享,可在线阅读,更多相关《数据库实验报告.docx(17页珍藏版)》请在冰豆网上搜索。
数据库实验报告
实验1数据库设计
实验名称:
数据库设计
实验内容:
以所在学校选课和课程管理为实际应用背景,设计一个教学管理数据库。
假设至少包含以下需求:
学生信息管理;
课程信息管理;
教师信息管理;
学生选修课程及成绩信息管理;
教师负责课程和讲授课程信息管理。
实验目的:
通过实践,掌握本章介绍的数据库设计方法。
学会使用PowerDesigner来完成数据库设计过程。
实验方法:
(1)根据实验内容明确要完成的系统功能。
(2)运行PowerDesigner创建概念数据模型转换成逻辑数据模型,建立实体、属性和联系。
对关键字、空值、域完整性等做出必要的描述,根据实际情况确定联系的类型。
(3)将检查无误的概念数据类型转换成逻辑数据模型,并对生成的逻辑数据模型作必要的修改。
(4)选择一个实际的DBMS软件根据逻辑数据模型生成物理数据模型,并对生成的物理数据模型作必要的修改。
实验要求:
使用PowerDesiger或其他建模工具完成本实验。
建立满足需求的概念数据模型,逻辑数据模型和物理数据模型。
提交实验报告(含完整的设计文档)。
实验过程、源程序、运行结果及简单分析:
概念数据模型
逻辑数据
物理数据模型
总结:
经过对这个实验的制作,信息比较多,做表格有点复杂,涉及的框架知识多,对关键字、空值、域完整性做的描述基本熟练。
对概念数据模型、物理数据模型、逻辑数据模型的基本掌握。
开始对数据库的设计有了一定的了解。
实验2建立表和完整性约束
实验名称:
建立数据库、架构、表和定义完整性约束
实验内容:
参见2.1.7数据库的CREATEDATABASE命令首先建立数据库,然后参照图5-1和表5-8建立表并定义完整性约束,可以在此基础上根据自己学校的实际情况增加表、字段和约束等。
实验目的:
熟练掌握表的建立和数据完整性约束的定义方法,实践DBMS提供的数据完整性功能,加深对数据完整性的理解。
实验方法:
用CREATEDATABASE命令建立数据库,使用CREATESCHEMA命令建立架构,用CREATETABLE命令建立表并定义数据完整性约束,用ALTERTABLE命令修改表结构。
实验要求:
(1)用CREATEDATABASE命令建立数据库(自己命名数据库的名称)。
用CREATESCHEMA命令建立架构(自己命名架构名称)。
在定义的架构下参照图5-1所示的样本数据库和表5-8的具体要求使用CREATETABLE命令建立表并定义完整性约束。
用ALTERTABLE命令按如下要求修改表结构:
为学生表增加一个“平均成绩”字段,类型为短整数,默认是空值;
为课程表的“学时”字段重新定义约束:
取值为8的倍数,不允许为空值;
将院系表的名称字段的类型修改为varchar(30)。
为教师表增加一个工资字段,类型为5位整数、2位小数的数值型。
实验过程、源程序、运行结果及简单分析:
建立数据库
createdatabase教务信息
on(name=juxx_dat,
filename='C:
\ProgramFiles\MicrosoftSQLServer\90\Tools\Binn\VSShell\Common7\林碧娴',
size=10mb,
maxsize=50mb,
filegrowth=5mb)
logon
(name=juxx_log,
filename='C:
\ProgramFiles\MicrosoftSQLServer\90\Tools\Binn\VSShell\Common7\lin',
size=5mb,
maxsize=25mb,
filegrowth=5mb)
建立架构
createschema教务信息
定义表及完整性约束
createtable教务信息.院系
(编号smallintprimarykey,
名称char(20)notnull,
负责人char(10),
办公地点char(20))
createtable教务信息.学生
(学号char(8)primarykey,
院系smallintforeignkeyreferences教务信息.院系(编号),
姓名char(10)notnull,
性别char
(2)check(性别='男'or性别='女'),
生源char(6),
状态char(4)check(状态='正常'or状态='留级'or状态='休学'or状态='退学'))
createtable教务信息.教师
(教师编号char(8)primarykey,
院系smallintforeignkeyreferences教务信息.院系(编号),
姓名char(10)notnull,
性别char
(2)check(性别='男'or性别='女'),
职称char(6)check(职称='教授'or职称='副教授'or职称='讲师'or职称='助教'),
专业char(10))
createtable教务信息.课程
(课程编号char(8)primarykey,
课程名称char(20)notnull,
责任教师char(8)foreignkeyreferences教务信息.教师(教师编号),
学时intnotnull,
课程性质char(10)check(课程性质='公共基础'or课程性质='专业基础'or课程性质='专业选修'or课程性质='任意选修'))
createtable教务信息.选课
(学号char(8)primarykeyforeignkeyreferences教务信息.学生(学号),
课程编号char(8)foreignkeyreferences教务信息.课程(课程编号),
成绩intcheck(成绩>=0and成绩<=100)defaultnull)
修改表结构
altertable教务信息.学生
add平均成绩smallintdefaultnull
altertable教务信息.课程
addconstraintsbcheck(学时%8=0)
altertable教务信息.院系
altercolumn名称varchar(30)
altertable教务信息.教师
add工资numeric(7,2)
总结:
通过此次的实验,让我对使用CREATEDATABASE命令建立数据库有了更加熟练的认识,对CREATESCHEMA命令建立架构的基本掌握,学会了使用CREATETABLE命令建立表并定义数据完整性约束,也ALTERTABLE命令修改表架构。
学到了更多,懂得了更多。
实验3数据操作及完整性约束体验
实验名称:
数据操作及完整性约束体验
实验内容:
在实验2的基础上完成数据的插入操作,然后进行部分修改和删除操作,在这些操作中体会数据完整性约束的作用。
实验目的:
熟练掌握SQL的INSERT、UPDATE和DELETE命令,深刻理解数据完整性约束的作用以及约束时机。
实验方法:
在实验2的基础上首先用INSERT命令插入各个表的记录,然后使用UPDATE和DELETE命令对部分记录进行修改和删除操作。
实验要求:
(1)读者自行设计各个表的记录,记录院系表至少10条记录、学生表至少30条记录、课程表至少10条记录、教师表至少10条记录、选课表至少50条记录。
(2)使用INSERT命令完成记录的插入操作,要求分别设计若干违反实体完整性、参照完整性和用户完整性约束的插入操作,并分析原因。
(3)设计若干删除操作,体会执行删除操作时检查参照完整性规则的效果(要求涉及拒绝删除、空值删除、和级联删除等不同的处理方式)。
(4)设计若干更新操作,体会执行更新操作时检查实体完整性规则、参照完整性规则和定义完整性规则的效果。
(5)在实验报告中要给出具体的记录和设计的操作,并针对各种数据完整性检查给出具体的分析和讨论。
实验过程、源程序、运行结果及简单分析:
插入数据
insertinto教务信息.院系values('01','理学院','E1','二教')
insertinto教务信息.院系values('02','财经学院','E2','三教')
insertinto教务信息.院系values('03','电气学院','E3','四教')
insertinto教务信息.院系values('04','土建学院','E4','四教')
insertinto教务信息.院系values('05','医学院','E5','三教')
insertinto教务信息.院系values('06','外语学院','E6','三教')
insertinto教务信息.院系values('07','管理学院','E7','三教')
insertinto教务信息.院系values('08','麓山学院','E8','五教')
insertinto教务信息.院系values('09','汽车学院','E9','六教')
insertinto教务信息.院系values('10','生化学院','E10','三教')
insertinto教务信息.学生values('2012001','01','林一','女','南宁','正常','80')
insertinto教务信息.学生values('2012002','02','雷一','女','崇左','正常','90')
insertinto教务信息.学生values('2012003','01','莫一','女','河池','正常','80')
insertinto教务信息.学生values('2012004','05','曹一','女','北海','正常','80')
insertinto教务信息.学生values('2012005','04','董一','女','百色','正常','80')
insertinto教务信息.学生values('2012006','07','封一','女','南宁','正常','80')
insertinto教务信息.教师values('001','01','林二','女','教授','统计学','4000')
insertinto教务信息.教师values('002','02','雷二','男','副教授','信计学','3000')
insertinto教务信息.教师values('003','03','莫二','女','讲师','统计学','4000')
insertinto教务信息.教师values('004','05','曹二','女','助教','数应学','2000')
insertinto教务信息.课程values('101','数学分析','001','40','公共基础')
insertinto教务信息.课程values('102','概率论','002','40','专业基础')
insertinto教务信息.课程values('103','数据库','003','24','专业选修')
insertinto教务信息.课程values('104','计量经济学','004','40','任意选修')
insertinto教务信息.选课values('2012001','101','80')
insertinto教务信息.选课values('2012002','102','70')
insertinto教务信息.选课values('2012003','103','80')
insertinto教务信息.选课values('2012004','104','60')
insertinto教务信息.选课values('2012005','101','90')
insertinto教务信息.选课values('2012006','103','80')
设计若干操作违反完整性约束的操作
insertinto教务信息.院系values('01','职教院','E11','三教')
删除操作
delete教务信息.选课where学号='2012006'
更新操作
update教务信息.学生set学号='2012002'where学号='2012007'
总结:
初次使用SQL软件的灵敏度的欠缺,也基本掌握了SQL的INSERT、UPDATE和DELETE命令,能理解数据完整性约束的作用以及约束时机。
各个表格的设计也偶尔出现了命令行出错,然后在进行解决。
实验4数据查询
实验名称:
使用SQLSELECT语句的数据查询操作。
实验内容:
在实验2和实验3的基础上完成规定的查询操作。
实验目的:
熟练掌握SQLSELECT的命令。
实验方法:
在实验2和实验3的基础上使用SQLSELECT命令完成实验要求中所规定的各种查询。
实验要求:
在实验2和实验3的基础上按要求设计查询,并用SQLSELECT命令查询。
1.一般简单查询
不带条件的查询指定字段。
查询某个表的全部信息。
使用单个条件的简单查询。
使用多个条件(AND关系)的简单查询。
使用多个条件(OR关系)大简单查询。
使用多个条件(AND和OR关系)的查询。
使用带NOT运算的查询。
使用BETWEEN...AND...的查询。
使用NOT...BETWEEN...AND...的查询。
使用LIKE运算符的字符串的匹配查询。
使用LIKE的模板匹配查询。
使用空值和非空值查询。
结果要求排序的查询。
查询结果按多列排序,并分别按升序和降序查询。
使用TOP显示前若干记录的查询。
使用TOP显示前若干记录的查询,如果有满足条件的记录一并列入。
连接查询
两个关系的简单查询。
带其他条件的两个关系的连接查询。
多个关系的连接查询。
两个关于的而广义笛卡儿积运算结果。
根据两个关系的广义笛卡儿积运算结果得出两个关系自然连接结果。
查询教师-课程信息,结果包含教师姓名、职称、课程名称和课程性质等4个字段。
查询教师-课程信息,结果包含教师姓名、职称、课程名称和课程性质等4个字段,要求结果中列出所有教师信息。
查询教师-课程信息,查询结果中包含教师姓名、职称、课程名称和课程性质等4个字段,要求结果中能够反应目前没有确定责任教师的课程信息。
查询教师-课程信息,查询结果中包含教师姓名,职称,课程名称和课程性质的4个字段,要求结果中技既能反应目前不是责任教师的信息,有能反应目前没有确认责任教师的课程信息。
使用嵌套查询
使用IN运算符查询。
使用NOTIN运算符查询。
使用关系运算符查询。
使用ANY或SOME的简单嵌套查询。
使用ALL的嵌套查询。
查询院系名称为含“计算机”、职称为教授、所负责课程为必修课的教师姓名、职称、课程名称和课程学时等信息(分别用嵌套查询和连接查询完成,分析各自的效率)。
设计两个内外层互相关的嵌套查询。
使用EXISTS的嵌套查询。
使用NOTEXISTS的嵌套查询。
汇总和分组查询
使用COUNT统计数目的查询。
使用SUM计算合计的查询。
一次完成求和、计数、计算平均值大查询。
查询所有课程的成绩都大于60分的学生的平均成绩。
查询数据库的成绩大于70分的、所有课程平均分最高的学生信息。
查询每个学生的平均成绩。
查询每个学生的所有课程的最高成绩、最低成绩、平均成绩、和所考课程的门数。
查询至少有10门必修课程考试成绩的每个学生的平均成绩。
设计2个使用COMPUTE..BY和COMPUTE的查询。
设计1个使用COMPUTE的查询。
设计一个使用COMPUT…BY的查询。
实验过程、源程序、运行结果及简单分析:
一般简单查询
select姓名,性别
from教务信息.学生
--查询学生的姓名,性别
select*from教务信息.选课
--查询选课表的信息
select姓名,院系
from教务信息.教师
where工资!
<3000
--③使用单个条件的简单查询
select*from教务信息.教师
where工资between2000and3000
--④ 使用多个条件(AND关系)的简单查询
select*from教务信息.教师
where工资=2000or工资=3000
--⑤ 使用多个条件(OR关系)大简单查询
select*from教务信息.教师
where工资between2000and3000or工资=4000
--⑥ 使用多个条件(AND和OR关系)的查询
select*from教务信息.教师
wherenot工资=2000or工资=3000
--⑦ 使用带NOT运算的查询
select*from教务信息.教师
wherenot工资between2000and3000
-- 使用NOT...BETWEEN...AND...的查询
select*from教务信息.院系where办公地点like'%三教%'
-- 使用NOT...BETWEEN...AND...的查询
select*from教务信息.院系where编号isnotnull
-- 使用空值和非空值查询
select*from教务信息.教师orderby工资
-- 结果要求排序的查询
selecttop(3)*from教务信息.教师orderby工资
--使用TOP显示前若干记录的查询
selecttop(3)withties*from教务信息.教师orderby工资
-- 使用TOP显示前若干记录的查询,如果有满足条件的记录一并列入
(2)连接查询
select姓名,专业,课程名称from教务信息.教师join教务信息.课程
on教师编号=责任教师
where工资>2000
select姓名,专业,课程名称,院系.名称from教务信息.教师join教务信息.课程
on教师编号=责任教师
join教务信息.院系on教师.院系=院系.编号
where工资>2000
select*from教务信息.教师crossjoin教务信息.院系
select姓名,职称,课程.课程名称,课程性质
from教务信息.教师join教务信息.课程
on教师编号=责任教师
select姓名,职称,课程.课程名称,课程性质
from教务信息.教师leftjoin教务信息.课程
on教师编号=责任教师
select姓名,职称,课程.课程名称,课程性质
from教务信息.教师rightjoin教务信息.课程
on教师编号=责任教师
select姓名,职称,课程.课程名称,课程性质
from教务信息.教师fulljoin教务信息.课程
on教师编号=责任教师
嵌套查询
select院系.编号from教务信息.院系where编号in(
select院系from教务信息.学生where平均成绩=80)
select院系.编号from教务信息.院系where编号notin(
select院系from教务信息.学生where平均成绩=80)
select姓名from教务信息.学生where平均成绩=(
select平均成绩from教务信息.学生where姓名='林一')
selectdistinct姓名from教务信息.学生where平均成绩>=any(
select平均成绩from教务信息.学生where院系=1)
selectdistinct姓名from教务信息.学生where平均成绩=all(
select平均成绩from教务信息.学生where院系=1)
select课程名称,学时,课程性质from教务信息.课程outa
where学时=(selectmax(学时)from教务信息.课程where责任教师in(
select教师编号from教务信息.教师where教师编号=责任教师))
select*from教务信息.院系wherenotexists(select*from教务信息.学生where院系=编号)
selectsum(工资),count(*),avg(工资),max(工资),min(工资)from教务信息.教师
selectavg(平均成绩)from教务信息.学生
selectdistinct工资from教务信息.教师computecount(工资)
select*from教务信息.教师orderby教师编号
computeavg(工资),sum(工资)by教师编号
computeavg(工资),sum(工资)
总结:
通过实验,学会使用SQLSELECT的数据查询操作,对左连接、右连接、内连接全连接的掌握,对简单嵌套查询、条件查询等等各种查询的练习的基本熟悉,同时也对SQLSELECT查询命令的基本框架的熟悉与理解。
让自己的能力有了更好的提升。
实验5视图的应用
实验名称:
视图的建立和应用
实验内容:
在实验2和实验3的基础上定义视图,并在视图上查询以及插入、删除、和更新和操作。
实验目的:
掌握视图定义和应用方法,体会视图和基本表的异同。
实验方法:
在实验2和实验3的基础上用CREATEVIEW命令定义视图,然后使用SELECT命令完成查询,使用INSERT、UPDATE和DELETE命令分别完成插入、更新和删除操作。
实验要求:
在实验2建立的基本表的基础上,按如下要求设计和建立视图:
基于单个表按投影操作定义视图。
基于单个表按选择操作定义视图。
基于单个表按选择和投影操作定义视图。
基于多个表根据连接操作定义视图。
基于多个表根据嵌套查询定义视图。
定义含有虚字段的视图。
分别在定义的视图上设计一些查询(包括基于视图和基本表的连接或嵌套查询)。
在不同的视图上分别设计一些插入、更新和删除操,分情况讨论那些操作可以成功,那些操作不能完成,并分析原因。
在实验报告中要给出具体的视图定义要求和操作要求,并针对各情况做出具体的分析和讨论。
实验过程、源程序、运行结果及简单分析:
建立视图
createview教师asselect教师编号,姓名,职称from教务信息.教师
--基于单个表的按投影操作定义视图
createview教师asselect教师编号,姓名,专业from教务信息.教师where性别='女'
--基于单个表的按选择和投影操作定义视图
createview教师课程asselect教师编号,姓名,课程编号,课程名称
from教务信息.教师join教务信息.课程on教师编号=责任教师
--基于多个表的连接操作定义视图
CREATEVIEW教师与课程视图AS
SELECT教师编号,工资,性别,课程名称,课程编号,责任教师
FROM教务信息.教师JOIN教务信息
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据库 实验 报告
![提示](https://static.bdocx.com/images/bang_tan.gif)