西电计算机数据库上机报告-学生管理系统.docx
《西电计算机数据库上机报告-学生管理系统.docx》由会员分享,可在线阅读,更多相关《西电计算机数据库上机报告-学生管理系统.docx(11页珍藏版)》请在冰豆网上搜索。
![西电计算机数据库上机报告-学生管理系统.docx](https://file1.bdocx.com/fileroot1/2022-10/20/f1790926-4bb1-4c0c-b8ba-651906e7b1b6/f1790926-4bb1-4c0c-b8ba-651906e7b1b61.gif)
西安电子科技大学
数据库系统
(2016年度)
上
机
报
告
题目:
学生信息管理系统
班级:
组长姓名:
组长学号:
一、需求分析
1.数据需求:
需要涉及以下几个数据字典,学生基本信息表表,班级表,系表,学生学会表。
学生基本信息表表
Sno
学生的学号
Sname
学生姓名
Ssex
性别
Sage
年龄
Sbirth
出生年月
班级表
Cno
班级号
Cyear
入学年份
Cnum
班级人数
Cname
专业名
系表
Dno
系号
Dname
系名
Doffice
系办公室地点
Dnum
系人数
Dzone
住宿区
学生学会表
SUno
学会号
SUname
学会名
SUyear
成立时间
SUzone
地点
2.任务需求:
(1)实现学生基本情况的录入,修改,删除等基本操作。
(2)对学生基本信息提供灵活的查询方式。
(3)建立学生学会名和学会人数的视图
(4)触发器可以在增加或者删除学生时自动增加或者删除系人数和班级人数
(5)存储过程,可以更改班级号并返回人数
(6)建立一个游标,可以对系的人数统计,如果与人数不相同可以更新系的人数
二、数据库设计
1.概念结构设计
局部ER图
学生
学号
姓名
性别
年龄
出生年份
班级
班级号
入学年份
班级人数
专业名
系号
系名
系办公室地点
系人数
住宿区
系
学会
学会号
学会名
成立时间
地点
整体的ER图
属于
系
系办公室地点
系号号
系名
系人数
期
住宿区
加入
学生
出生年月
性别
姓名
学号
年龄
属于
班级
入学年份
班级号号
班级人数
名
专业名
学会
学会号
学会名
成立时间
地点
入会年份
属于
2.逻辑结构设计
(1)ER图转换为关系模型
由ER图可见:
图中有四个实体:
学生,班级,系和学会;四个关系:
学生学会加入关系,学生与班级之间的属于关系,学生与系之间的属于关系,班级与系之间的属于关系。
由于每个实体必须构造表,所以可以先得到四个实体的信息表,实体的码就是关系的码,实体的属性即关系模型的属性:
Student(Sno,Sname,Ssex,Sage,Sbirth,Dno,Cno)
Dept(Dno,Dname,Doffice,Dnum,Dzone)
Class(Cno,Cyear,Cnum,Cname,Dno)
StuUnion(SUno,SUname,SUyear,SUzone)
对于多对多的关系来说,与该联系相连的实体的码以及本身的属性均转换为关系的属性,各实体之间的码组成关系的码或者关系的码的一部分。
以上ER图的联系为多对多,所以转换为关系模式为:
Join(Sno,SUno,Jyear)
3.物理结构设计
(1)基本表
学生表Student
列名
主码
候选码
外码
被参照表
允许空
数据类型
约束条件
Sno
是
否
否
无
否
Char(9)
Sname
否
否
否
无
否
Char(20)
Ssex
否
否
否
无
是
Char
(2)
只可取男或女
Sbirth
否
否
否
无
是
Char(20)
Sage
否
否
否
无
是
smallint
20-30
Dno
否
否
是
Dept
否
Char(3)
Cno
否
否
是
Class
否
Char(6)
班级表Class
列名
主码
候选码
外码
被参照表
允许空
数据类型
约束条件
Cno
是
否
否
无
否
Char(6)
Cyear
否
否
否
无
是
Char(5)
Cnum
否
否
否
无
是
Int
Cname
否
否
否
无
是
Char(6)
Dno
否
否
是
Dept
是
Char(3)
系表Dept
列名
主码
候选码
外码
被参照表
允许空
数据类型
约束条件
Dept
是
否
否
无
否
Char(3)
Dname
否
否
否
无
是
Char(20)
Doffice
否
否
否
无
是
Char(20)
Dnum
否
否
否
无
是
Int
Dzone
否
否
否
无
是
Char(10)
学会表StuUnion
列名
主码
候选码
外码
被参照表
允许空
数据类型
约束条件
SUno
是
否
否
无
否
Char(5)
SUname
否
否
否
无
是
Char(20)
SUyear
否
否
否
无
是
Char(5)
SUzone
否
否
否
无
是
Char(20)
参加学会表JoinSU
列名
主码
候选码
外码
被参照表
允许空
数据类型
约束条件
Sno
是
否
是
Student
否
Char(9)
SUno
是
否
是
StuUnion
否
Char(5)
Jyear
否
否
否
无
是
Char(5)
(2)视图,索引
a.索引:
本数据库中的表除了主键本身生成的主索引外,没有定义其他的索引。
在查询时即引用主索引即可。
表Student的主索引列为:
Sno
表Class的主索引列为:
Cno
表Dept的主索引列为:
Dno
表StuUnion的主索引列为:
SUno
表Join的主索引列为:
Sno,SUno
b.视图:
虽然关系数据模型分析的结果表示该数据库需要定义不同的用户视图,但考虑到数据库与前台开发程序的连接比较复杂,所以该数据库中没有单独定义用户视图,不同的用户视图被有选择性的的select语句的结果集取.
三、系统实现
1.表的建立
1)系表
CREATETABLEDept
( DnoCHAR(3)NOTNULL,
DnameCHAR(20)NOTNULL,
DofficeCHAR(20)NOTNULL,
DnumINT,
DzoneCHAR(10),
PRIMARYKEY(Dno)
);
2)班级表
CREATETABLEClass
( CnoCHAR(6)NOTNULL,
CyearCHAR(5),
CnumINT,
CnameCHAR(6),
DnoCHAR(3),
PRIMARYKEY(Cno),
FOREIGNKEY(Dno)REFERENCESDept(Dno)
ONDELETECASCADE
ONUPDATECASCADE
);
3)学生表
CREATETABLEStudent
( SnoCHAR(9)NOTNULL,
SnameCHAR(20)NOTNULL,
SbirthCHAR(20),
SsexCHAR
(2)CHECK(SsexIN(’男’,’女’)),
SageSMALLINTCHECK(Sage>10ANDSage<30),
DnoCHAR(3)NOTNULL,
CnoCHAR(6)NOTNULL,
PRIMARYKEY(Sno),
FOREIGNKEY(Dno)REFERENCESDept(Dno)
ONDELETECASCADE
ONUPDATECASCADE,
FOREIGNKEY(Cno)REFERENCESClass(Cno)
ONUPDATECASCADE
ONDELETECASCADE
);
4)学会表
CREATETABLEStuUnion
( SUnoCHAR(5)NOTNULL,
SUnameCHAR(20),
SUyearCHAR(5),
SUzoneCHAR(20),
PRIMARYKEY(SUno)
);
5)参加学会表
CREATETABLEJoinSU
( SnoCHAR(9)NOTNULL,
SUnoCHAR(5)NOTNULL,
JyearCHAR(5),
PRIMARYKEY(Sno,SUno),
FOREIGNKEY(Sno)REFERENCESStudent(Sno)
ONDELETECASCADE
ONUPDATECASCADE,
FOREIGNKEY(SUno)REFERENCESStuUnion(SUno)
ONDELETECASCADE
ONUPDATECASCADE
);
2.创建学会的视图
CREATEVIEWClub(SUNAME,SNUM)
AS
SELECTMAX(SUname),COUNT(DISTINCTSno)
FROMJoinSU,StuUnion
WHEREStuUnion.SUno=JoinSU.SUno
GROUPBYStuUnion.SUno
3.建立在学生表上的触发器(能根据每个班的学生变动情况自动增减班级表和系表的人数字段的值)
CREATETRIGGERUpdate_people
ONStudent
FORINSERT,DELETE
AS
UPDATEDept
SETDept.Dnum=Dept.Dnum+1
WHEREDept.Dno=(
SELECTINSERTED.Dno
FROMINSERTED)
UPDATEDept
SETDept.Dnum=Dept.Dnum-1
WHEREDept.Dno=(
SELECTDELETED.Dno
FROMDELETED)
UPDATEClass
SETClass.Cnum=Class.Cnum+1
WHEREClass.Cno=(
SELECTINSERTED.Cno
FROMINSERTED)
UPDATEClass
SETClass.Cnum=Class.Cnum-1
WHEREClass.Cno=(
SELECTDELETED.Cno
FROMDELETED)
4.建立存储过程(给定一个班的旧班号和新班号,把所有相关表中此班的旧班号改为新班号,并返回此班的人数(使用输出参数))
CREATEPROCEDURECHANGE
@oldnumCHAR(6),@newnumCHAR(6),@CnumINTOUTPUT
AS
UPDATEClass
SETClass.Cno=@newnum,@Cnum=Cnum
WHEREClass.Cno=@oldnum
UPDATEStudent
SETStudent.Cno=@newnum
WHEREStudent.Cno=@oldnum
DECLARE@Cnu