资源描述
实用标准文案
编号: 2012版
《数据库原理及应用》
实验报告
实验时间: 2011-2012春季
实验班级: 自动化电气
实验报告总份(片)数: 七 份(片)
实验教师:
实验中心 508 实验室
广东工业大学
精彩文档
广东工业大学实验报告
____自动化_学院___电气__专业____班 成绩评定_______
学号_xxxxxxx姓名__xxx_(合作者____号____) 教师签名_______
预习情况
操作情况
考勤情况
数据处理情况
实验 一 题目 数据库系统设计 第___周星期___第___节
一、 实验目的与要求
掌握数据库的基本设计技术,熟悉数据库概念模型设计的每个任务步骤,并加深对关系数据库概念和特点的理解。
要求学生根据周围的实际情况自选一个小型的数据库应用项目并深入到应用项目的现实世界中进行系统分析和数据库设计,例如选择学生成绩管理系统、图书管理系统或仓库管理系统等。
学生成绩管理数据库的基本要求:
1. 能够记录学生的基本信息,包括学号、姓名、性别、出生日期及所属学院;
2. 能够记录课程的基本信息,包括课程号,课程名,先行课号;
3. 能够记录学生选课情况及选修课程的成绩;
(学生成绩管理系统及图书管理系统数据库应用项目介绍可参见蔡延光《数据库原理及应用》第11章或苗雪兰《数据库原理及应用》第5章)。给出各表的关系结构和表级约束、给出各属性域的描述(包括物理描述和语义描述);
二、 实验方案
利用数据库设计的5个步骤(识别实体、确定关系、列出属性、确定键及属性的域属性的域),对学生成绩管理系统(必选)、图书管理系统(可选)使用鸭脚模型对学生选课系统(必选)及图书管理系统进行相关数据库的数据建模及设计。
l 使用ChenERD或鸭脚模型表示所设计的概念模型;
l 给出各表的关系结构和表级约束;
l 给出各属性域的描述,包括物理描述和语义描述;
三、 数据库应用项目进行概念模型设计实验结果和数据处理
1、ER数据建模
2、各表的关系结构和表级约束
学生(学号,姓名,性别,出生日期,学院)
课程(课程号,课程名,先行课号)
选课(学号,课程号,成绩)
其中学号必须存在于学生.学号,课程号必须存在于课程.课程号
3、各属性域的描述
学生表
字段名
类型
约束
学号
char(5)
主键
姓名
varchar(20)
NULL
性别
char(2)
NULL
出生日期
Smalldatetime
NULL
所在学院
varchar(15)
NULL
选课表
字段名
类型
约束
课程号
char(8)
主键
课程名
varchar(15)
NULL
先行课程号
char(8)
NULL
成绩表
字段名
类型
约束
学号
char(5)
主键1.1(外键)
课程号
char(8)
主键1.2(外键)
成绩
Int
NULL
四、 结论
数据库张表既存储数据,也存储关系;每个表必要要有自己的主键;外键必须参照完整性约束。
五、 问题与讨论
1、 关系数据库中如何保存实体之间的关系?
答:通过创建关联表,建立保存实体之间的关系
2、 学生选课系统中属性学号、课程号及成绩采用哪种数据类型更好,数值型还是字符型?为什么?
答:采取数据型更好。第一,这些属性一般定义为数值型是很常见的;第二,属性学号以及课程号在自己所在的表里做primary key,而primary key一般多为数值型。
3、 在所设计的数据模型中体现的业务规则是什么?
答:一个学生可以选多门课程;一个学生可以不选课。;一门课程可以有多个学生选;一门课程可以没有学生选广东工业大学实验报告
____自动化___学院___ 电气____专业___ __班 成绩评定_______
学号 姓名_ _ (合作者____号____) 教师签名______
预习情况
操作情况
考勤情况
数据处理情况
实验 二 题目 数据库的定义实验 第___周星期___第___节
一、 实验目的与要求
要求熟练掌握和使用SQL、SQL Server企业管理器创建数据库、表、索引和修改表结构,并学会使用SQL Server查询分析器接受SQL语句和进行结果分析。
二、 实验方案
1、 在企业管理器中创建及打开数据库,在“新建数据库”时指明数据文件及事务日志的位置;
2、 在SQL Server企业管理器中用SQL语句实现以下各表:
学生(学号,姓名,性别,出生日期,所属学院);
课程(课程号,课程名,先行课号);
选课(学号,课程号,成绩);
3、建立库、表和表间的联系,选择合适的数据类型,定义必要的列级约束(包括性别约束和成绩约束)和表级约束。创建数据库中的表后,在查询分析器的对象浏览器中可见该表及其所拥有的约束:学生:2课程:1选课:4
三、 实验结果和数据处理
CREATE TABLE Student
( 学号 char(10) primary key ,
姓名 varchar(20) unique,
性别 char(2) check (性别 in ('男' ,'女') ),
出生日期 char(20),
所属学院 varchar(20),
)
create table course
(课程号 char (10) primary key ,
课程名 char (20),
先行课号 int
)
create table score
( 学号 char (10) foreign key (学号) references student (学号) ,
课程号 char(10) foreign key (课程号) references course (课程号),
成绩 int check (成绩>=0 and 成绩 <=100)
constraint s_c_prim primary key (学号 , 课程号),
)
四、 结论
SQL的数据库定义的功能包括定于数据库、基本表、视图和索引,SQL一般不提供修改试图定义及修改索引定义的操作。在定义基本表的同时,还可以定义与该表相关的完整性约束条件,这些完整性约束条件被存入系统的数据字典中。
五、 问题与讨论
1、 举例说明创建外键的SQL语句中的参照表和被参照表各指什么?ON DELETE CASCADE 关键字对删除记录有何影响?
学生表(学号,姓名)、成绩表(学号,成绩),这两个表在学号上建立外键关系的话, 学生表是被参照表, 成绩表是参照表。ON DELETE CASCADE 是级联删除,如果删除学生表里的b学号的记录,那成绩表里所有学号为b的记录也会同时被删除。
问题:中英文的符号经常打错
解决:一遇到要打符号的问题,就变得小心翼翼
广东工业大学实验报告
____自动化___学院___ ____专业___ _班 成绩评定_______
学号_ 姓名_ _ (合作者____号____) 教师签名______
预习情况
操作情况
考勤情况
数据处理情况
实验 三 题目 数据库的建立和维护实验 第___周星期___第___节
一、 实验目的与要求
要求熟练掌握和使用SQL、SQL Server企业管理器向数据库输入数据、修改数据和删除数据操作。
二、 实验方案
通过SQL Server企业管理器实现对学生成绩管理数据库的数据增加、数据删除和数据修改操作。要求每个表的记录在10行以上,可根据查询要求增加或完善表中记录;输入数据检验各数据约束的限制;数据更改和数据删除时检验外码约束;
三、 实验结果和数据处理
insert into Student ( 学号 ,姓名,性别,出生日期,所属学院) values ('001','张一','男', '19910101','计算机')
insert into Student ( 学号 ,姓名,性别,出生日期,所属学院) values ('001','张二','男', '19920101','自动化')
insert into Student ( 学号 ,姓名,性别,出生日期,所属学院) values ('001','张三','女', '19930101','土木')
insert into Student ( 学号 ,姓名,性别,出生日期,所属学院) values ('001','张四','男', '19940101','轻工化工')
insert into Student ( 学号 ,姓名,性别,出生日期,所属学院) values ('001','张五','女', '19950101','外国语')
insert into Student ( 学号 ,姓名,性别,出生日期,所属学院) values ('001','张六','男', '19960101','物理')
insert into Student ( 学号 ,姓名,性别,出生日期,所属学院) values ('001','王七','女', '19970101','计算机')
insert into Student ( 学号 ,姓名,性别,出生日期,所属学院) values ('001','张八','男', '19980101','艺术')
insert into Student ( 学号 ,姓名,性别,出生日期,所属学院) values ('001','张九','女', '19990101','环境')
insert into Student ( 学号 ,姓名,性别,出生日期,所属学院) values ('001','张十','男', '20000101','数学系')
insert into course ( 课程号 ,课程名号,先行课号) values ('001','天文','1')
insert into course ( 课程号 ,课程名号,先行课号) values ('002','经文','2')
insert into course ( 课程号 ,课程名号,先行课号) values ('003','易经','3')
insert into course ( 课程号 ,课程名号,先行课号) values ('004','高等数学','4')
insert into course ( 课程号 ,课程名号,先行课号) values ('005','佛山无影脚','5')
insert into course ( 课程号 ,课程名号,先行课号) values ('006','葵花宝典','6')
insert into course ( 课程号 ,课程名号,先行课号) values ('007','排山倒海','7')
insert into course ( 课程号 ,课程名号,先行课号) values ('008','金刚不坏','8')
insert into course ( 课程号 ,课程名号,先行课号) values ('009','金枪不倒','9')
insert into course ( 课程号 ,课程名号,先行课号) values ('010','兰花指','10')
insert into score ( 学号 ,课程号,成绩) values ('001','010','80')
insert into score ( 学号 ,课程号,成绩) values ('002','009','81')
insert into score ( 学号 ,课程号,成绩) values ('003','008','82')
insert into score ( 学号 ,课程号,成绩) values ('004','007','83')
insert into score ( 学号 ,课程号,成绩) values ('005','001','84')
insert into score ( 学号 ,课程号,成绩) values ('006','005','null')
insert into score ( 学号 ,课程号,成绩) values ('007','004','86')
insert into score ( 学号 ,课程号,成绩) values ('008','001','89')
insert into score ( 学号 ,课程号,成绩) values ('009','002','88')
insert into score ( 学号 ,课程号,成绩) values ('010','001','89')
课程表
成绩表
学生表
数据更改
update score set 成绩='91'where 学号='001'
数据删除
Delete from score where 学号=’001’
四、 结论
在输入数据时,数据必须按照前面所指定的数据类型进行输入,超出数据类型输入无效。可以通过用插入数据指令来实现对表格数据的输入,还可以通过使用查询分析器来达到显示和修改数据的目的。
五、 问题与讨论
1.举例说明如何在输入数据时检验各数据约束的限制?
比如一个学生信息表中,会有性别列,而且性别只能是男或者女,这时候就可以使用检查约束,检查输入的值是否为男或者女,如果不是这两个值则会报错!
2.举例说明如何在数据更改和数据删除时检验外码约束?举例说明创建外键时有无ON DELETE CASCADE 关键字对删除记录有何影响?
学生表(学号,姓名)、成绩表(学号,成绩),如果把学生表中的学号删除了,那么成绩表中的成绩也会删除。ON DELETE CASCADE指定如果试图删除某行,而该行含有由其它表的现有行中的外键所引用的键,则也将删除所有包含那些外键的行。如果在目标表上也定义了级联引用操作,则对从那些表中删除的行同样采取指定的级联操作。
广东工业大学实验报告
____自动化___学院___ ____专业__ __班 成绩评定_______
学号_ 姓名_ _ (合作者____号____) 教师签名______
预习情况
操作情况
考勤情况
数据处理情况
实验 四 题目数据库的简单查询和连接查询实验 第___周星期___第___节
一、 实验目的与要求
要求熟练掌握和使用SQL、SQL Server企业管理器向数据库输入数据、修改数据和删除数据操作。
二、 实验方案
通过SQL Server查询分析器实现对学生成绩管理数据库的以下简单查询和连接查询:
1. 求数学系学生的学号和姓名;
2. 求选修了课程的学生学号;
3. 求选修课程001的学生学号和成绩,并要求对查询结果按成绩降序排列,如果成绩相同则按学号升序排列;
4. 求选修课程001且成绩在80~90分之间的学生学号和成绩,并将成绩乘以系数0.8输出;
5. 求数学系或计算机系姓张的学生的信息;
6. 求缺少了成绩的学生的学号和课程号;
7. 查询每门课程的先行课程名;
三、 实验结果和数据处理
1.select 姓名,学号 from Student where 所属学院='数学系'
2.select 学号 from score where 课程号 is not null
3. select 学号,成绩 from score where 课程号 ='001'
order by 成绩 desc , 学号
4. select 学号,0.8*成绩 from score where ( 课程号='001') and (成绩>=80 and 成绩 <=90)
5. select*from Student where ( 所属学院='数学系' or 所属学院='计算机') and 姓名 like '张%'
6. select 学号,课程号 from score where 成绩 is null
7. select 课程名 , 先行课号 from course
四、 结论
关系数据库方法的主要优点之一就是它能够十分灵活地检索数据。基本上能够以任何方式查看数据库中的数据。关键在于能够正确写出SQL语言。在关系数据库中有三个核心的检索操作:选择、投影和连接。
五、 问题与讨论
1、如何提高数据查询和连接速度?
对索引优化,建索引的选择必须结合SQL查询、修改、删除语句的需要,一般的说法是在WHERE里经常出现的字段建索引。如果在WHERE经常是几个字段一起出现而且是用
AND连接的,那就应该建这几个字段一起的联合索引,而且次序也需要考虑,一般是最常出现的放前面。
广东工业大学实验报告
______________学院________________专业_____班 成绩评定_______
学号__________姓名__________(合作者____号____) 教师签名_______
预习情况
操作情况
考勤情况
数据处理情况
实验 五 题目数据库的嵌套查询实验 第___周星期___第___节
一、 实验目的与要求
进一步掌握SQL Server查询分析器的使用方法,加深SQL语言的嵌套查询语句的理解。
二、 实验方案
通过SQL Server查询分析器实现对数据库的以下嵌套查询,并尝试用多种形式表示实验中的查询语句,并进行比较。
1、求选修了高等数学的学生学号和姓名;
2、求C1课程的成绩高于张五的C1课程成绩的学生学号和成绩;
3、求选修C2课程的学生姓名;
4、求没有选修C2课程的学生姓名;
5、求选修C1课程而没有选修C2课程的学生姓名;
三、 实验结果和数据处理
1.select Student.学号 , Student.姓名 from Student, course, score
where Student.学号 = score.学号
and course.课程号=score.课程号
and course.课程名='高等数学'
2 .select 学号,成绩 from score where 课程号='001' and 成绩 >
( select score.成绩 from Student , score
where Student.姓名='张五'
and score.课程号='001'
and Student.学号=score.学号)
3.select Student.姓名 from Student, course, score
where Student.学号 = score.学号
and course.课程号=score.课程号
and course.课程号='002'
4. select Student.姓名 from Student, course, score
where Student.学号 = score.学号
and course.课程号=score.课程号
and course.课程号!='002'
5 .select Student.姓名 from Student, score
where Student.学号 = score.学号
and score.课程号='001'
and score.课程号!='002'
四、 结论
如何提高数据查询和连接速度?
对索引优化,建索引的选择必须结合SQL查询、修改、删除语句的需要,一般的说法是在WHERE里经常出现的字段建索引。如果在WHERE经常是几个字段一起出现而且是用
AND连接的,那就应该建这几个字段一起的联合索引,而且次序也需要考虑,一般是最常出现的放前面。
五、 问题与讨论
1.嵌套查询和连接查询有何区别?在本实验的查询任务中,哪些是可以由嵌套查询和连接查询实现?
当查询同时涉及两个以上的表时,称为连接查询。连接查询包括等值连接查询、自然连接查询、非等值连接查询、自身连接查询、外连接查询和复合条件查询。
在SQL语言中,一个SELECT-FROM-WHERE语句称为一个查询块,将一个查询块嵌套在另外一个查询块的WHERE字句或HAVING短语的条件中的查询称为嵌套查询。
连接查询:求选修了高等数学的学生学号和姓名,求选修C2课程的学生姓名。
嵌套查询:求C1课程的成绩高于张三的C1课程成绩的学生学号和成绩,求选修C1课程而没有选修C2课程的学生姓名
广东工业大学实验报告
__ __学院___ __专业__ ___班 成绩评定_______
学号_ _姓名_ (合作者____号____) 教师签名_______
预习情况
操作情况
考勤情况
数据处理情况
实验 六 数据库统计查询实验 第___周星期___第___节
一、 实验目的与要求
熟悉掌握SQL Server查询分析器的使用方法,加深对SQL语言查询语句的理解,熟悉掌握数据查询中的分组和统计的操作方法。
二、 实验方案
通过SQL Server查询分析器实现以下对数据库的统计查询;
1. 用SQL语句实现学生人数的统计;
2. 用SQL语句实现计算机系学生人数的统计;
3. 用SQL语句实现各系学生人数的统计;
4. 用SQL语句统计选修某课程学生的人数;
5. 用SQL语句统计选修了课程的学生的人数;
6. 用SQL语句统计被选课程及选修该课程的人数;
7. 用SQL语句统计每个学生全部课程的平均成绩;
8. 用SQL语句统计选修课超过3门课的学生学号;(可选)
三、实验结果和数据处理
1. select count(*) as 学生人数 from Student
2. select count(*) as 学生人数 from Student where 所属学院='计算机'
3. select 所属学院, count(*) as 学生人数 from Student group by 所属学院
4. select 课程号, count(*) as 学生人数 from score group by 课程号
5. select count(*) as 学生人数 from score where 课程号 is not null
6. select 课程号, count(*) as 学生人数 from score group by 课程号
7. select 学号 , avg(成绩) as 平均成绩 from score group by 学号
8. select score.学号 as 学生学号 from score group by score.学号 having count(*)>3
表示没有选课超过3门的学生
四、结论
SQL Server包括很多内置的函数。它们中的一些被称为聚集函数,聚集函数在结果列表中提供汇总值。分组查询使用GROUP BY字句。HAVING字句用于筛选分组的最终结果,只有满足HAVING字句指定条件的组才输出。
五、问题与讨论
1、试用GROUP BY(分组条件)字句后,语句中的统计函数的运行结果有什么不同?
运行结果会根据GROUP BY字句中的条件进行一定的排列
广东工业大学实验报告
___自动化___学院___ __专业__ __班 成绩评定_______
学号_ 姓名_ __(合作者____号____) 教师签名_______
预习情况
操作情况
考勤情况
数据处理情况
实验七题目 数据库的视图和图标的定义及使用实验 第___周星期__第_节
一、 实验目的与要求
掌握SQL Server中视图的创建和使用,加深对视图和SQL Server图表作用的理解。
二、 实验方案
通过SQL Server实现数据库的视图的创建及使用,完成以下任务:
1、建立计算机系学生的视图;
2、由学生、课程和选课三个表,定义一个计算机系的学生成绩视图,其属性包括学号、姓名、课程名和成绩;
3、将学生的学号、总成绩、平均成绩定义成一个视图;
4、统计学生的学号、姓名、总成绩及平均成绩(可利用3的视图或group by 学生.学号,学生.姓名);
三、实验结果和数据处理
1. create view 视图 as select 学号,姓名,性别,出生日期,所属学院 from Student where 所属学院='计算机
2. create view 视图2 as select Student.学号,姓名,课程名,成绩 from Student,course,score
where Student.学号 = score.学号
and course.课程号=score.课程号
Student.所属学院='计算机'
3. create view 学生个人成绩 as select 学号, sum (成绩)AS 总成绩,avg(成绩) as 平均成绩 from score group by 学号
4. create view 学生个人成绩2 as select score.学号,student.姓名, sum (成绩)AS 总成绩,avg(成绩) as 平均成绩 from score,student where student.学号=score.学号 group by score.学号,student.姓名
四、结论
视图是关系数据库系统提供给用户以多角度观察数据库中数据的一种重要方法。视图就是从一个或几个基本表(或视图)导出的虚表。视图在概念上与基本表等同,视图一经定义,则可以和基本表一样进行查询、删除、更新等操作,而且用户可以在视图上再定义视图。
五 问题与讨论
1.为什么要建立视图?视图和基本表有什么不同?
答: 视图能够简化用户的操作,视图能够以多角度观察数据库中的数据,视图对重构数 据库提供了一定程度的逻辑独立性,视图能够对机密数据提供安全保护,适当的利用视图可以更加清晰的表达查询。
视图可以理解为保存后的查询,它保存的是‘实在’表格经查询后的结果;基本表是指数据库中‘实在’的表格,它存储的就是数据本身。基本表是视图的来源和基础,视图丰富了基本表的表达。
2.group by语句在使用时需要注意什么事项?
答:GROUP BY 语句中的表达式必须与选择列表表达式完全匹配。
展开阅读全文