数据库实验报告

时间:2024.4.8

数据库实验报告

组长:

组员:

班级:

指导教师:

主要任务:

1. 分析题意,画出E-R图,将E-R图转换为关系模式并进行模式优化。

2. SQL Server 2008环境下编写SQL代码,创建视图、触发器、存储过程和游标。

组员:

主要任务:

1. 根据优化后的关系模式创建基本表,并填充数据。

2. 参与优化模式讨论。

3. 撰写实验报告。

一.题目:设计学生管理系统

需求语义:

今要建立关于系、学生、班级、学会等诸信息的一个关系数据库。一个系有若干专业,每个专业每年只招一个班,每个班有若干学生。一个系的学生住在同一宿舍区。每个学生可参加若干学会,每个学会有若干学生。学生参加某学会有一个入会年份。描述各个实体的属性(加下划线者为主码)如下:

学生:学号、姓名、年龄、系名、班号、宿舍区。

班级:班号、专业名、入校年份、系名、人数。

系:系号、系名、系办公室地点、人数。

学会:学会号、学会名、成立年份、地点。

要完成的任务:

1. 画出E-R图。

2. 把E-R图转为关系模式,并优化。

3. 根据关系模式创建数据库。表名和属性名用英文,属性的数据类型根据上面的描述自己定义。

4. 创建一个视图,能显示每个学会的学会名,学生数(实际不存在,也不能增加)。

5. 创建一个触发器,能根据每个班的学生变动情况自动增减班级表和系表的人数字段的值。

6. 创建一个存储过程,实现如下功能:给定一个班的旧班号和新班号,把所有相关表中此班的旧班号改为新班号,并返回此班的人数(使用输出参数)。

7. 编写一段脚本,使用游标完成如下功能:确定系表中人数字段的值与实际学生数是否相符。如果不相符,把人数字段的值改为实际数,并在窗口打印此系的系号、系名、原人数、实际人数。

二.概念结构设计

原始E-R图:

数据库实验报告

消除冲突和冗余后的E-R图

数据库实验报告

三.逻辑结构设计

stuunion(uno,uname,uyear,uplace)

student(sno,sname,sage,clno)

sjoin(uno,sno,joinyear)

class(clno,clyear,cltotal)

major(mjname,clno,dnl)

dept(dno,dname,dwkplace,dtotal)

dormitory(dno,dorplace)

经检验,以上7个关系模式均满足第三范式要求

四.应用程序中遇到的问题及解决方法

根据设计好的关系模式,即可在SQL Sever 2008环境下编程。前面创建表、视图、触发器的过程都比较简单,创建存储过程的时候遇到了一点问题,班号更改以后无法把相关表中的班号也修改了,最后发现原因是student和major两个从表无法级联更新,于是又给这两个表增添了随着class表级联更新的属性,问题迎刃而解。最后创建游标的过程有点复杂,不过整体还是比较顺利的。

五.总结

这次上机实验收获还是挺多的,上课的时候学到了理论,当真正把理论运用到实践中的时候发现其实没那么容易。虽然只是设计了一个学生管理系统,这个系统规模不大,数据也不多,但是当真正设计这个数据库的时候过程是比较曲折的。我觉得重点就是根据需求设计E-R图,设计出E-R图后还要消除冲突和冗余,然后将E-R图转换为关系模式,还要对关系模式规范化,达到一个非常好的效果。此次上机实验也锻炼了同学之间的合作能力,我积极和同学探讨问题,也向老师请教问题,学到了好多课本上没有学到的知识。

附录:

代码:

--student 表

create table student

(

sno varchar(8) primary key,

sname varchar(20) not null unique,

sage int,

clno char(6) references class(clno)

);

--class表

create table class

(

clno char(6) primary key,

clyear int,

cltotal int

)

--major表

create table major

(

mjname varchar(20) primary key,

clno char(6) references class (clno),

dno char(2) references dept(dno)

)

--dept表

create table dept

(

dno char(2) primary key,

dname varchar(20) not null unique,

dworkplace varchar(20),

dtotal int

)

--dormitory表

create table dormitory

(

dorplace varchar(20),

dno char(2) references dept(dno)

)

--stuunion表

create table stuunion

(

uno char(6) primary key,

uname varchar(20) not null unique,

uyear int,

uplace varchar(20)

)

--sjoin表

create table sjoin

(

uno char(6) references stuunion(uno),

sno varchar(8) references student(sno),

joinyear int,

primary key(uno,sno)

)

--创建视图

create view uname_utotal(uname,utotal)

as

select uname,count(*)

from stuunion,sjoin

where stuunion.uno=sjoin.uno

group by stuunion.uname

with check option;

--创建触发器

create trigger insert_cltotal_dtotal on student

for insert

as

declare @a char(6);

declare @c char(2);

set @a=(

select class.clno

from class,inserted

where class.clno=inserted.clno

);

update class

set cltotal=cltotal+1

where clno=@a;

set @c=(

select dept.dno

from major,dept,inserted

where major.dno=dept.dno and major.clno=inserted.clno

);

update dept

set dtotal=dtotal+1

where dno=@c;

create trigger delete_cltotal_dtotal on student

for delete

as

declare @a char(6)

declare @c char(2)

set @a=(

select class.clno;

from class,deleted;

where class.clno=deleted.clno

);

update class

set cltotal=cltotal-1

where clno=@a;

set @c=(

select dept.dno

from major,dept,deleted

where major.dno=dept.dno and major.clno=deleted.clno

);

update dept

set dtotal=dtotal-1

where dno=@c;

--创建存储过程

create procedure pro_modifycno

@oldcno char(6), @newcno char(6), @classtotal int output

as

update class

set clno=@newcno

where clno=@oldcno;

update student

set clno=@newcno

where clno=@oldcno;

update major

set clno=@newcno

where clno=@oldcno;

set @classtotal=

(

select cltotal

from class

where clno=@newcno

)

declare @x int

exec pro_modifycno @oldcno='011221',@newcno='051221',@classtotal=@x output

print @x

alter table student add constraint c1 foreign key(clno) references class(clno) on update cascade

alter table major add constraint c2 foreign key(clno) references class(clno) on update cascade

--建立游标

declare @Dep varchar(10);

declare @Class varchar(10);

drop table Change

create table Change

(

dno char(10) primary key,

dtotal int

);

insert into Change(dno,dtotal)

select dept.dno,dept.dtotal

from dept

declare StuNumCheck cursor for

select dno,clno

from major

open StuNumCheck

update dept

set dtotal = 0

fetch next from StuNumCheck into @Dep,@Class

while @@FETCH_STATUS = 0

begin

update dept

set dtotal =dtotal + ( select COUNT(*)

from student

where clno = @Class

)

where dept.dno = @Dep;

fetch next from StuNumCheck into @Dep,@Class

end

select dept.dno,dept.dname,Change.dtotal,dept.dtotal

from Change,dept

where Change.dno = dept.dno

close StuNumCheck

deallocate StuNumCheck


第二篇:数据库实验报告(3)


数据库系统及应用

实验报告

实验名称:数据更新

实验地点:11教407

专业班级:

学生姓名:

学生学号:

指导教师:

成  绩:

20##年 11月 5日


更多相关推荐:
数据库实验报告——

实验一SQLServer基本使用与数据定义一实验目的1掌握企业管理器及查询的定义方法使用方法2熟悉数据库建模及ER图的画法3掌握SQLServer中数据库及数据表的建立与管理方法4掌握数据的导入导出及数据库备份...

数据库实验报告

实验一SQLServer基本使用与数据定义一实验目的1掌握服务管理器企业管理器及查询分析器基本使用方法2熟悉数据库建模及ER图的画法3掌握SQLServer中数据库及数据表的建立与管理方法4掌握数据的导入导出及...

数据库实验报告(SQL)

SQLServer实验报告学号姓名专业信息管理与信息系统目录实训一数据库的基本操作实训二表实训三数据完整性实训四索引实训五数据查询实训六视图实训七TransactSQL程序设计实训八存储过程实训九触发器实训十S...

数据库设计实验报告

HEFEIUNIVERSITY数据库设计报告题目产品销售系统系别电子信息与电气工程系班级09级电气信息类5班学号0905075034姓名黄张祥指导老师方小红完成时间20xx510目录1问题描述311背景312数...

数据库实验报告范本

重庆大学经济与工商管理学院实验报告课程名称数据库原理及应用实验学期20xx年至20xx年第2学期学生所在学院经济与工商管理学院年级20xx专业班级电子商务01班学生姓名kcy学号指导教师签名实验最终成绩经管学院...

数据库实验报告

实验二数据库的简单查询连接查询组合查询和统计查询一实验目的1使用SQLSever查询分析器的使用方法2加深TransatSQL语言的查询语句的理解3熟练掌握简单表的数据查询数据排列和数据连接查询的操作方法4熟练...

SQL数据库实验报告

数据库系统及应用实验报告设计课题SQL20xx数据库安装及数据库建立专业班级山东大学通信二班小组成员王指导教师设计时间20xx12121题目一课程目的1学习安装SQLServer20xx2学习使用SQLServ...

数据库实验报告

实验报告五游标存储过程与触发器一实验目的掌握使用TSQL实现游标存储过程和触发器的创建使用方法二实验内容在实验一实验二创建的表中用TSQL语句完成以下内容1使用游标实现将SC表中及格的选课信息输出usestud...

数据库实验报告1

河北科技大学实验报告级专业班学号年月日姓名同组人指导教师实验名称数据定义数据操纵语言成绩实验类型批阅教师一实验目的熟悉SQLServer上机环境以及SQLServer客户端的配置熟练掌握和使用DDL语言建立修改...

数据库实验报告

实验内容与要求请有选择地实践以下各题1基于教学管理数据库jxgl使用SQL的查询语句表达下列查询检索年龄大于23岁的男学生的学号和姓名SELECTSnoSnameFROMStudentWHERESsex男AND...

数据库实验报告

数据库实验报告实验名称数据库查询操作实验目的熟悉数据库查询掌握SQL查询语句的使用方法实验环境SQLServer20xx实验内容及结果1检索供应零件给编号为J1的工程的供应商编号SNO2检索供应零件给工程J1且...

数据库实验报告

学生实验报告(理工类)课程名称:软件平台与中间件技术专业班级:12软件工程学生学号:学生姓名:所属院部:软件工程学院指导教师:20XX20XX学年第1学期金陵科技学院教务处制实验报告书写要求实验报告原则上要求学…

数据库实验报告(30篇)