2024年2月21日发(作者:)

实验1 数据库设计

实验名称:数据库设计

实验内容:以所在学校选课和课程管理为实际应用背景,设计一个教学管理数据库。假设至少包含以下需求:

学生信息管理;

课程信息管理;

教师信息管理;

学生选修课程及成绩信息管理;

教师负责课程和讲授课程信息管理。

实验目的:

通过实践,掌握本章介绍的数据库设计方法。

学会使用PowerDesigner来完成数据库设计过程。

实验方法:

(1)根据实验内容明确要完成的系统功能。

(2)运行PowerDesigner创建概念数据模型转换成逻辑数据模型,建立实体、属性和联系。对关键字、空值、域完整性等做出必要的描述,根据实际情况确定联系的类型。

(3)将检查无误的概念数据类型转换成逻辑数据模型,并对生成的逻辑数据模型作必要的修改。

(4)选择一个实际的DBMS软件根据逻辑数据模型生成物理数据模型,并对生成的物理数据模型作必要的修改。

实验要求:

使用PowerDesiger或其他建模工具完成本实验。

建立满足需求的概念数据模型,逻辑数据模型和物理数据模型。

提交实验报告(含完整的设计文档)。

实验过程、源程序、运行结果及简单分析:

概念数据模型

选课课程课程名称Characters (20)课程编号Characters (10)学时Characters (10)学分Characters (10)课程编号...负责授课教师教师编号Characters (20)姓名Characters (20)性别Characters (10)教师编号...学生姓名Characters (10)学号Characters (20)班级Characters (20)性别Characters (4)学院Characters (10)学号...

逻辑数据

选课选课课程编号Characters (10)姓名Characters (10)成绩Identifier_1...选课课程课程名称Characters (20)课程编号Characters (10)教师编号Characters (20)学时Characters (10)学分Characters (10)课程编号...授课授课教师编号Characters (20)课程编号Characters (10)Identifier_1...授课负责学生姓名Characters (10)学号Characters (20)班级Characters (20)性别Characters (4)学院Characters (10)学号...教师教师编号Characters (20)姓名Characters (20)性别Characters (10)教师编号...

物理数据模型

选课课程编号char(10)姓名char(10)成绩character课程课程名称char(20)课程编号char(10)教师编号char(20)学时char(10)学分char(10)...授课教师编号char(20)课程编号char(10)学生姓名学号班级性别学院...char(10)char(20)char(20)char(4)char(10)

总结:经过对这个实验的制作,信息比较多,做表格有点复杂,涉及的框架知识多,对关键字、空值、域完整性做的描述基本熟练。对概念数据模型、物理数据模型、逻辑数据模型的基本掌握。开始对数据库的设计有了一定的了解。

教师教师编号char(20)姓名char(20)性别char(10)

实验2 建立表和完整性约束

实验名称:建立数据库、架构、表和定义完整性约束

实验内容:参见2.1.7数据库的CREATE DATABASE命令首先建立数据库,然后参照图5-1和表5-8建立表并定义完整性约束,可以在此基础上根据自己学校的实际情况增加表、字段和约束等。

实验目的:熟练掌握表的建立和数据完整性约束的定义方法,实践DBMS提供的数据完整性功能,加深对数据完整性的理解。

实验方法:用CREATE DATABASE命令建立数据库,使用CREATE SCHEMA命令建立架构,用CREATE TABLE命令建立表并定义数据完整性约束,用ALTER TABLE命令修改表结构。

实验要求:

(1)用CREATE DATABASE命令建立数据库(自己命名数据库的名称)。

用CREATE SCHEMA命令建立架构(自己命名架构名称)。

在定义的架构下参照图5-1所示的样本数据库和表5-8的具体要求使用CREATE TABLE命令建立表并定义完整性约束。

用ALTER TABLE命令按如下要求修改表结构:

为学生表增加一个“平均成绩”字段,类型为短整数,默认是空值;

为课程表的“学时”字段重新定义约束:取值为8的倍数,不允许为空值;

将院系表的名称字段的类型修改为varchar(30)。

为教师表增加一个工资字段,类型为5位整数、2位小数的数值型。

实验过程、源程序、运行结果及简单分析:

建立数据库

create database 教务信息

on (name = juxx_dat,

filename = 'C:Program FilesMicrosoft SQL Server90ToolsBinnVSShellCommon7林碧娴',

size=10mb,

maxsize=50mb,

filegrowth=5mb)

log on

(name=juxx_log,

filename='C:Program FilesMicrosoft SQL Server90ToolsBinnVSShellCommon7lin',

size=5mb,

maxsize=25mb,

filegrowth=5mb)

建立架构

create schema 教务信息

定义表及完整性约束

create table 教务信息.院系

(编号smallint primary key,

名称char(20)not null,

负责人char(10),

办公地点char(20))

create table 教务信息.学生

(学号char(8)primary key,

院系smallint foreign key references 教务信息.院系(编号),

姓名char(10)not null,

性别char(2)check(性别= '男' or 性别= '女'),

生源char(6),

状态char(4)check(状态= '正常' or 状态= '留级' or 状态= '休学' or 状态= '退学'))

create table 教务信息.教师

(教师编号char(8)primary key,

院系smallint foreign key references 教务信息.院系(编号),

姓名char(10)not null,

性别char(2)check(性别= '男' or 性别= '女'),

职称char(6)check(职称= '教授' or 职称= '副教授' or 职称= '讲师' or 职称= '助教'),

专业char(10))

create table 教务信息.课程

(课程编号char(8)primary key,

课程名称char(20)not null,

责任教师char(8)foreign key references 教务信息.教师(教师编号),

学时int not null,

课程性质char(10)check(课程性质= '公共基础' or 课程性质= '专业基础' or 课程性质= '专业选修' or 课程性质= '任意选修'))

create table 教务信息.选课

(学号char(8)primary key foreign key references 教务信息.学生(学号),

课程编号char(8)foreign key references 教务信息.课程(课程编号),

成绩int check(成绩>=0 and 成绩<=100)default null)

修改表结构

alter table 教务信息.学生

add 平均成绩smallint default null

alter table 教务信息.课程

add constraint sb check (学时% 8=0)

alter table 教务信息.院系

alter column 名称varchar(30)

alter table 教务信息.教师

add 工资numeric (7,2)

总结:

通过此次的实验,让我对使用CREATE DATABASE命令建立数据库有了更加熟练的认识,

对CREATE SCHEMA命令建立架构的基本掌握,学会了使用CREATE TABLE命令建立表并定义数据完整性约束,也ALTER TABLE命令修改表架构。学到了更多,懂得了更多。

实验3 数据操作及完整性约束体验

实验名称:数据操作及完整性约束体验

实验内容:在实验2的基础上完成数据的插入操作,然后进行部分修改和删除操作,在这些操作中体会数据完整性约束的作用。

实验目的:熟练掌握SQL的INSERT、UPDATE和DELETE命令,深刻理解数据完整性约束的作用以及约束时机。

实验方法:在实验2的基础上首先用INSERT命令插入各个表的记录,然后使用UPDATE和DELETE命令对部分记录进行修改和删除操作。

实验要求:

(1)读者自行设计各个表的记录,记录院系表至少10条记录、学生表至少30条记录、课程表至少10条记录、教师表至少10条记录、选课表至少50条记录。

(2)使用INSERT命令完成记录的插入操作,要求分别设计若干违反实体完整性、参照完整性和用户完整性约束的插入操作,并分析原因。

(3)设计若干删除操作,体会执行删除操作时检查参照完整性规则的效果(要求涉及拒绝删除、空值删除、和级联删除等不同的处理方式)。

(4)设计若干更新操作,体会执行更新操作时检查实体完整性规则、参照完整性规则和定义完整性规则的效果。

(5)在实验报告中要给出具体的记录和设计的操作,并针对各种数据完整性检查给出具体的分析和讨论。

实验过程、源程序、运行结果及简单分析:

插入数据

insert into 教务信息.院系values('01','理学院','E1','二教')

insert into 教务信息.院系values('02','财经学院','E2','三教')

insert into 教务信息.院系values('03','电气学院','E3','四教')

insert into 教务信息.院系values('04','土建学院','E4','四教')

insert into 教务信息.院系values('05','医学院','E5','三教')

insert into 教务信息.院系values('06','外语学院','E6','三教')

insert into 教务信息.院系values('07','管理学院','E7','三教')

insert into 教务信息.院系values('08','麓山学院','E8','五教')

insert into 教务信息.院系values('09','汽车学院','E9','六教')

insert into 教务信息.院系values('10','生化学院','E10','三教')

insert into 教务信息.学生values('2012001','01','林一','女','南宁','正常','80')

insert into 教务信息.学生values('2012002','02','雷一','女','崇左','正常','90')

insert into 教务信息.学生values('2012003','01','莫一','女','河池','正常','80')

insert into 教务信息.学生values('2012004','05','曹一','女','北海','正常','80')

insert into 教务信息.学生values('2012005','04','董一','女','百色','正常','80')

insert into 教务信息.学生values('2012006','07','封一','女','南宁','正常','80')

insert into 教务信息.教师values('001','01','林二','女','教授','统计学','4000')

insert into 教务信息.教师values('002','02','雷二','男','副教授','信计学','3000')

insert into 教务信息.教师values('003','03','莫二','女','讲师','统计学','4000')

insert into 教务信息.教师values('004','05','曹二','女','助教','数应学','2000')

insert into 教务信息.课程values('101','数学分析','001','40','公共基础')

insert into 教务信息.课程values('102','概率论','002','40','专业基础')

insert into 教务信息.课程values('103','数据库','003','24','专业选修')

insert into 教务信息.课程values('104','计量经济学','004','40','任意选修')

insert into 教务信息.选课values('2012001','101','80')

insert into 教务信息.选课values('2012002','102','70')

insert into 教务信息.选课values('2012003','103','80')

insert into 教务信息.选课values('2012004','104','60')

insert into 教务信息.选课values('2012005','101','90')

insert into 教务信息.选课values('2012006','103','80')

设计若干操作违反完整性约束的操作

insert into 教务信息.院系values('01','职教院','E11','三教')

删除操作

delete 教务信息.选课where 学号= '2012006'

更新操作

update 教务信息.学生set 学号='2012002' where 学号='2012007'

总结:

初次使用SQL软件的灵敏度的欠缺,也基本掌握了SQL的INSERT、UPDATE和DELETE命令,能理解数据完整性约束的作用以及约束时机。各个表格的设计也偶尔出现了命令行出错,然后在进行解决。

实验4 数据查询

实验名称:使用SQL SELECT 语句的数据查询操作。

实验内容:在实验2和实验3的基础上完成规定的查询操作。

实验目的:熟练掌握SQL SELECT 的命令。

实验方法:在实验2和实验3的基础上使用SQL SELECT命令完成实验要求中所规定的各种查询。

实验要求:

在实验2和实验3的基础上按要求设计查询,并用SQL SELECT 命令查询。

1.一般简单查询

不带条件的查询指定字段。

查询某个表的全部信息。

使用单个条件的简单查询。

使用多个条件(AND关系)的简单查询。

使用多个条件(OR关系)大简单查询。

使用多个条件(AND和OR关系)的查询。

使用带NOT运算的查询。

使用的查询。

使用的查询。

使用LIKE运算符的字符串的匹配查询。

使用LIKE的模板匹配查询。

使用空值和非空值查询。

结果要求排序的查询。

查询结果按多列排序,并分别按升序和降序查询。

使用TOP显示前若干记录的查询。

使用TOP显示前若干记录的查询,如果有满足条件的记录一并列入。

连接查询

两个关系的简单查询。

带其他条件的两个关系的连接查询。

多个关系的连接查询。

两个关于的而广义笛卡儿积运算结果。

根据两个关系的广义笛卡儿积运算结果得出两个关系自然连接结果。

查询教师-课程信息,结果包含教师姓名、职称、课程名称和课程性质等4个字段。

查询教师-课程信息,结果包含教师姓名、职称、课程名称和课程性质等4个字段,要求结果中列出所有教师信息。

查询教师-课程信息,查询结果中包含教师姓名、职称、课程名称和课程性质等4个字段,要求结果中能够反应目前没有确定责任教师的课程信息。

查询教师-课程信息,查询结果中包含教师姓名,职称,课程名称和课程性质的4个字段,要求结果中技既能反应目前不是责任教师的信息,有能反应目前没有确认责任教师的课程信息。

使用嵌套查询

使用IN运算符查询。

使用NOT IN 运算符查询。

使用关系运算符查询。

使用ANY或SOME的简单嵌套查询。

使用ALL的嵌套查询。

查询院系名称为含“计算机”、职称为教授、所负责课程为必修课的教师姓名、职称、课程名称和课程学时等信息(分别用嵌套查询和连接查询完成,分析各自的效率)。

设计两个内外层互相关的嵌套查询。

使用EXISTS的嵌套查询。

使用 NOT EXISTS的嵌套查询。

汇总和分组查询

使用COUNT统计数目的查询。

使用SUM计算合计的查询。

一次完成求和、计数、计算平均值大查询。

查询所有课程的成绩都大于60分的学生的平均成绩。

查询数据库的成绩大于70分的、所有课程平均分最高的学生信息。

查询每个学生的平均成绩。

查询每个学生的所有课程的最高成绩、最低成绩、平均成绩、和所考课

程的门数。

查询至少有10门必修课程考试成绩的每个学生的平均成绩。

设计2个使用COMPUTE..BY和COMPUTE的查询。

设计1个使用COMPUTE的查询。

设计一个使用COMPUT…BY的查询。

实验过程、源程序、运行结果及简单分析:

一般简单查询

select 姓名,性别

from 教务信息.学生

--查询学生的姓名,性别

select*from 教务信息.选课

--查询选课表的信息

select 姓名,院系

from 教务信息.教师

where 工资!<3000

--③使用单个条件的简单查询

select*from 教务信息.教师

where 工资between 2000 and 3000

--④ 使用多个条件(AND关系)的简单查询

select*from 教务信息.教师

where 工资=2000 or 工资=3000

--⑤ 使用多个条件(OR关系)大简单查询

select*from 教务信息.教师

where 工资between 2000 and 3000 or 工资=4000

--⑥ 使用多个条件(AND和OR关系)的查询

select*from 教务信息.教师

where not 工资=2000 or 工资=3000

--⑦ 使用带NOT运算的查询

select*from 教务信息.教师

where not 工资between 2000 and 3000

-- 使用的查询

select*from 教务信息.院系where 办公地点like '%三教%'

-- 使用的查询

select*from 教务信息.院系where 编号is not null

-- 使用空值和非空值查询

select*from 教务信息.教师order by 工资

-- 结果要求排序的查询

select top(3)*from 教务信息.教师order by 工资

--使用TOP显示前若干记录的查询

select top(3)with ties*from 教务信息.教师order by 工资

-- 使用TOP显示前若干记录的查询,如果有满足条件的记录一并列入

(2)连接查询

select 姓名,专业,课程名称from 教务信息.教师join 教务信息.课程

on 教师编号=责任教师

where 工资>2000

select 姓名,专业,课程名称,院系.名称from 教务信息.教师join 教务信息.课程

on 教师编号=责任教师

join 教务信息.院系on 教师.院系= 院系.编号

where 工资>2000

select*from 教务信息.教师cross join 教务信息.院系

select 姓名,职称,课程.课程名称,课程性质

from 教务信息.教师join 教务信息.课程

on 教师编号= 责任教师

select 姓名,职称,课程.课程名称,课程性质

from 教务信息.教师left join 教务信息.课程

on 教师编号= 责任教师

select 姓名,职称,课程.课程名称,课程性质

from 教务信息.教师right join 教务信息.课程

on 教师编号= 责任教师

select 姓名,职称,课程.课程名称,课程性质

from 教务信息.教师full join 教务信息.课程

on 教师编号= 责任教师

嵌套查询

select 院系.编号from 教务信息.院系where 编号in(

select 院系from 教务信息.学生where 平均成绩= 80)

select 院系.编号from 教务信息.院系where 编号not in(

select 院系from 教务信息.学生where 平均成绩= 80)

select 姓名from 教务信息.学生where 平均成绩=(

select 平均成绩from 教务信息.学生where 姓名='林一')

select distinct 姓名from 教务信息.学生where 平均成绩>=any(

select 平均成绩from 教务信息.学生where 院系=1)

select distinct 姓名from 教务信息.学生where 平均成绩=all(

select 平均成绩from 教务信息.学生where 院系=1)

select 课程名称,学时,课程性质from 教务信息.课程outa

where 学时=(select max(学时) from 教务信息.课程where 责任教师in(

select 教师编号from 教务信息.教师where 教师编号= 责任教师))

select*from 教务信息.院系where not exists(select*from 教务信息.学生where 院系= 编号)

select sum(工资),count(*),avg(工资),max(工资),min(工资) from 教务信息.教师

select avg(平均成绩) from 教务信息.学生

select distinct 工资from 教务信息.教师compute count(工资)

select*from 教务信息.教师order by 教师编号

compute avg(工资),sum(工资)by 教师编号

compute avg(工资),sum(工资)

总结:

通过实验,学会使用SQL SELECT的数据查询操作 ,对左连接、右连接、内连接全连接的掌握,对简单嵌套查询、条件查询等等各种查询的练习的基本熟悉,同时也对SQL SELECT查询命令的基本框架的熟悉与理解。让自己的能力有了更好的提升。

实验5 视图的应用

实验名称:视图的建立和应用

实验内容:在实验2和实验3的基础上定义视图,并在视图上查询以及插入、删除、和更新和操作。

实验目的:掌握视图定义和应用方法,体会视图和基本表的异同。

实验方法:在实验2和实验3的基础上用CREATE VIEW命令定义视图,然后使用SELECT

命令完成查询,使用INSERT、UPDATE和DELETE命令分别完成插入 、更新和删除操作。

实验要求:

在实验2建立的基本表的基础上,按如下要求设计和建立视图:

基于单个表按投影操作定义视图。

基于单个表按选择操作定义视图。

基于单个表按选择和投影操作定义视图。

基于多个表根据连接操作定义视图。

基于多个表根据嵌套查询定义视图。

定义含有虚字段的视图。

分别在定义的视图上设计一些查询(包括基于视图和基本表的连接或嵌套查询)。

在不同的视图上分别设计一些插入、更新和删除操,分情况讨论那些操作可以成功,那些操作不能完成,并分析原因。

在实验报告中要给出具体的视图定义要求和操作要求,并针对各情况做出具体的分析和讨论。

实验过程、源程序、运行结果及简单分析:

建立视图

create view 教师as select 教师编号,姓名,职称from 教务信息.教师

--基于单个表的按投影操作定义视图

create view 教师as select 教师编号,姓名,专业from 教务信息.教师where 性别= '女'

--基于单个表的按选择和投影操作定义视图

create view 教师课程as select 教师编号,姓名,课程编号,课程名称

from 教务信息.教师join 教务信息.课程on 教师编号= 责任教师

--基于多个表的连接操作定义视图

CREATE VIEW 教师与课程视图AS

SELECT 教师编号,工资,性别,课程名称,课程编号,责任教师

FROM 教务信息.教师JOIN 教务信息.课程ON 教师编号= 责任教师

--基于多个表的连接查询

总结:

在本实验上,基于对单个表按投影、选择、选择和投影、根据链接、根据嵌套查询操作定义视图的基本熟悉,明白了SQL SELECT查询是CREATE VIEW,而对于基本的命令格式也已经掌握,使用起来还是出现了一些命令未完成。