1.数据库实训案例

需求分析

对教务管理系统进行模块划分,分步进行设计和管理:
   1、 学生信息管理
该模块是教务工作人员进行对学生信息的管理,进行学生信息的添加、修改、删除。在进行信息的添加时,首先在新的窗口进行学生信息的录入,在保存的时候要进行学生学号是否有重复的检查,如果添加的学生编号有重复就要对用户进行提示。只有在不重复的情况下才能进行信息的添加。在进行信息的删除时,要首先打开提示窗口让用户确认是否要删除,只有在用户确认的情况下才能进行信息的删除。在进行信息的修改时,要根据用户选定的学生进行修改,即列出用户选定的学生的所有信息,在这个基础上进行学生信息的修改。
  
   2、 教师信息管理
教务工作人员通过此模块来管理教师信息,包括教师信息的添加、修改、删除等。
信息的添加时,需要验证教师的编号是否重复;删除和和修改学生信息,和学生信息管理模块相同。
  
  3、 院系管理
此模块是用来管理院系的信息,包括班级院系的添加,修改,删除等。在进行信息的添加时,需要进行班级的编号是否重复的检查,如院系编号重复则对用户进行提示,不重复则添加成功。院系管理模块的删除和修改和学生信息管理模块相同。
  
  4、 课程信息管理
教务工作人员通过该模块来管理课程的基本信息,包括课程信息的添加,修改,删除和班级课程的设置等,具体做法同前面的模块。
 
  5、 成绩管理
教务工作人员通过该模块来进行学生成绩的管理,在进行学生成绩的添加时,可用它来为学生设置所在班级的课程表来直接输入成绩。
 
  6、 打印管理
教务工作人员可以通过打印模块来打印学生成绩信息,选课表和班级表。可以根据班级、学生学号、课程编号来打印学生成绩单,打印前还要可以预览所要打印的报表。
 
  7、 综合查询
通过该模块可以查询教务所需要的各种信息。如学生信息查询提供了包括学生学号、姓名、所在班级、班主任名字和宿舍等信息,学生信息进行查询的各种查询条件,用户可以根据单个的查询条件或者它们的组合来进行查询。同时,在查询的时候还提供了进行模糊查询的功能,即该模块能够利用读者输入的非完整的查询条件进行查询,这样更加方便了用户的查询管理。综合查询模块包括了学生信息查询、教师信息查询、班级信息查询、院系信息查询、课程信息查询和成绩查询等各种功能查询。

8、 系统管理
该模块可以对系统登录的用户进行管理。在该模块中,教务人员可以添加允许登录的人员名单以及相应的密码,并对已有的用户进行密码修改或删除。
在这里插入图片描述

(结构如上图)

事务需求(权限)

综合分析教务管理系统各模块,我们需要对该系统实现基本的功能,并实现对用户对象的使用做出相应的权限。
  1、 学生可以查看学生自己的成绩、课程安排、课程表。
  2、 教师可以可以查看自己的基本信息、考试安排,可以对学生进行成绩的录入,不能添加、修改、删除系统的用户。
  3、 教务人员可以通过系统管理模块对系统用户进行添加、修改、删除;可以对学生的基本信息、成绩、课程、宿舍等进行添加、修改、删除;可以对教师的基本信息、课程安排进行各种操作;可以对各种模块进行更新和删除操作。

概念结构设计

概念设计是对整个数据库系统的一个抽象的描述和整体的概括,我们可以更加直观的去理解教务管理系统的结构,形成一个独立于具体DBMS(数据库管理系统)的概念模型,概念设计生成E-R图。
在这里插入图片描述

逻辑结构设计

1、学生信息管理:学生的学号、姓名、性别、专业、院系、联系方式(电话)
2、教师信息管理:教师的编号、姓名、性别、主讲课程、联系方式(电话)
3、院系管理:系别编号、系别名称、系主任、系主任联系方式(电话)
4、成绩管理:学生学号、姓名、课程号、课程名称、分数
5、课程信息表:课程号、课程名、任课教师、学分
6、系统管理:管理员姓名、性别、电话
根据这些模块的划分,结合模块的属性,我们需要在数据库中建立以下表:学生信息表(Student)、教师信息表(Teacher)、院系表(Department)、课程信息表(Course)、成绩表(Achievement)、管理员信息表(Administrator)。
学生信息表

属性名类型宽度主键取值范围
Sid字符型10
Sname字符型20
Ssex字符型2
Spre字符型20
Sdep字符型20
Stel字符型13

教师信息表

属性名类型宽度主键取值范围
Tid字符型10
Tname字符型20
Tsex字符型2
Tcou字符型20
Ttel字符型13

院系表

属性名类型宽度主键取值范围
Did字符型10
Dmc字符型20
Dname字符型20
Dtel字符型13

课程信息表

属性名类型宽度主键取值范围
Cid字符型10
Cname字符型20
Stc字符型10
Cxf字符型5

成绩信息表

属性名类型宽度主键取值范围
Sid字符型10
Sname字符型20
Cid字符型10
Cname字符型20
Afstinyint,

系统信息表

属性名类型宽度主键取值范围
Aname字符型20
Asex字符型2
Atel字符型13

物理设计

数据库的物理设计是对前一阶段的逻辑设计进行具体的物理实现,把我们的思想转化为实实在在的物理应用,通过对数据库的实践操作来实现我们的前期设计,良好的物理设计能很好的体现数据库的设计质量。在这阶段,我们需要确定在物理设备上的存储模式和存取方法,反复的思考,多次的评估,以确保物理路径清晰,各个表之间的相互关系明确;理清内模式以及内模式和模式之间的映像关系。具体来说,可以分为五步完成,前三步设计物理结构设计,后两步设计到约束和具体程序的设计:

  • (1) 存储记录结构设计:包括记录的组成,数据项的类型、长度,以及逻辑记录到存储记录的映射。
  • (2) 确定数据存放位置:可以把经常同时被访问的数据组合在一起,“记录聚簇”技术能满足这个要求(该技术在网上查询到的)。
  • (3) 存取方法的设计:存取路径可分为主存取路径和辅存取路径,前者用于主键的检索,后者用于辅助键的检索。
  • (4) 完整性和安全性的考虑:设计者应在完整性、安全性、有效性和效率方面进行分析,作曲权衡。

数据库实现

数据库实施阶段,运用DBMS提供的宿主语言,根据逻辑设计和物理设计的结果,建立数据库,编制与调试应用程序,组织数据入库,并进行试运行。
  1、创建数据库
   (1) 打开SQL工具“查询分析器”
   (2) 在查询窗口中键入下列SQL语句
  create database Edu_System
执行上述SQL语句即可新建一名为Edu_System的数据库
  2、创建数据表
    数据表是数据库中一个非常重要的对象,是其他对象的基础。数据库只是一个框架,数据表才是内容的实质,建表的原则:一个完整的数据库不可缺少的就是数据表,若干个数据表的集合成一个数据库。数据表主要用来存放一定格式的记录,数据表中的行被称为记录,列被称为字段。创建数据表的过程其实就是定义字段的过程。
创建数据库后,为Edu_System数据库添加数据表,步骤如下 :
   (1) 新建查询窗口
   (2) 在查询窗口中键入下列SQL语句创建表,同时建立主键和外键:
(学生信息表)

create table Student(       /* 创建学生信息表*/  
             Sid char(10) primary key,   /* 学号*/
             Sname varchar(20) not null, /* 姓名*/
             Ssex char(2) check (Ssex in ('男','女')), /* 性别*/
             Spre varchar(20),        /* 专业*/
             Sdep varchar(20),     /* 院系	*/
			 Stel char(13),          /* 联系电话*/
             )

(教师信息表)

create table Teacher(       /* 创建教师信息表*/ 
             Tid char(10) primary key,   /* 编号*/
             Tname varchar(20) not null,  /* 姓名*/
             Tsex char(2) check (Tsex in ('男','女')),    /* 性别*/
             Tcou varchar(20),     	 /* 主讲课程*/
			 Ttel char(13),           /* 电话*/ 
             )        

(院系表)

create table Department(       /* 创建院系表*/ 
             Did char(10) primary key,   /* 编号*/
			 Dmc varchar(20) not null,  /* 系别名称*/
             Dname varchar(20) not null,  /* 系主任*/ 
			 Dtel char(13),           /* 电话*/
             )

(课程信息表)

create table Course(       /* 创建课程信息表*/  	
             Cid char(10) primary key,   /* 课程号*/
             Cname varchar(20) not null, /* 课程名*/
             Stc varchar(10),        /* 任课教师*/
             Cxf varchar(5),     /* 学分	*/
             )

(成绩信息表)

create table Achievement(       /* 创建成绩信息表*/
      Sid char(10) not null foreign key references Student(Sid),   /* 学号*/
      Sname varchar(20) , /* 姓名*/
	  Cid char(10) not null foreign key references Course(Cid),   /* 课程号*/
      Cname varchar(20) , /* 课程名*/ 
 Afs tinyint,     /* 分数	*/
						)								

(系统管理表)

create table Administrator(       /* 创建系统管理表*/ 
			 Aname varchar(20) not null, /* 管理员姓名*/
             Asex char(2) check (Asex in ('男','女')), /* 性别*/
			 Atel char(13) not null,          /* 联系电话*/
             ) 

3.运用sql语句向表格中插入数据:
(学生信息表)

INSERT INTO Student(Sid,Sname,Ssex,Spre,Sdep,Stel)
VALUES ('0811090101','熬霞','女','信息管理与信息系统','工商管理学院','15232326361');
INSERT INTO Student(Sid,Sname,Ssex,Spre,Sdep,Stel)
VALUES ('0811090102','陈健','男','信息管理与信息系统','工商管理学院','15232326362');
INSERT INTO Student(Sid,Sname,Ssex,Spre,Sdep,Stel)
VALUES ('0811090103','陈勤','男','信息管理与信息系统','工商管理学院','15232326363');
INSERT INTO Student(Sid,Sname,Ssex,Spre,Sdep,Stel)
VALUES ('0811090104','陈欣欣','女','信息管理与信息系统','工商管理学','15232326364');
INSERT INTO Student(Sid,Sname,Ssex,Spre,Sdep,Stel)
VALUES ('0811090105','戴柯柯','男','信息管理与信息系统','工商管理学','15232326365');

在这里插入图片描述

(教师信息表)

INSERT INTO Teacher(Tid,Tname,Tsex,Tcou,Ttel)
VALUES ('101','王刚','男','数据结构 ','15242421001');
INSERT INTO Teacher(Tid,Tname,Tsex,Tcou,Ttel)
VALUES ('102','高星','男','计算机网络','15242421002');
INSERT INTO Teacher(Tid,Tname,Tsex,Tcou,Ttel)
VALUES ('103','肖娟','女','java程序设计','15242421003');
INSERT INTO Teacher(Tid,Tname,Tsex,Tcou,Ttel)
VALUES ('104','许伟丽','女','项目管理','15242421004');
INSERT INTO Teacher(Tid,Tname,Tsex,Tcou,Ttel)
VALUES ('105','刘书霞','男','jsp程序设计','15242421005');

在这里插入图片描述

(院系表)

INSERT INTO Department(Did,Dmc,Dname,Dtel)
VALUES ('201','工商管理学院','秦波','15262620011');
INSERT INTO Department(Did,Dmc,Dname,Dtel)
VALUES ('202','数信学院','韩旭','15262620012');
INSERT INTO Department(Did,Dmc,Dname,Dtel)
VALUES ('203','文法学院','陈其','15262620013');
INSERT INTO Department(Did,Dmc,Dname,Dtel)
VALUES ('204','财经学院','魏芳','15262620014');
INSERT INTO Department(Did,Dmc, Dname,Dtel)
VALUES ('205','体育系','李元','15262620015');

在这里插入图片描述

(课程信息表)

INSERT INTO Course(Cid,Cname,Stc,Cxf)
VALUES ('301','数据结构','王刚','4');
INSERT INTO Course(Cid,Cname,Stc,Cxf)
VALUES ('302','计算机网络','高星','3');
INSERT INTO Course(Cid,Cname,Stc,Cxf)
VALUES ('303','java程序设计','肖娟','4');
INSERT INTO Course(Cid,Cname,Stc,Cxf)
VALUES ('304','项目管理','许伟丽','2');
INSERT INTO Course(Cid,Cname,Stc,Cxf)
VALUES ('305','jsp程序设计','刘书霞','3');

在这里插入图片描述

(系统管理表)

INSERT INTO Administrator(Aname,Asex,Atel)
VALUES ('张操','男','15372720001');
INSERT INTO Administrator(Aname,Asex,Atel)
VALUES ('许杰','男','15372720002');
INSERT INTO Administrator(Aname,Asex,Atel)
VALUES ('吴旭','男','15372720003');
INSERT INTO Administrator(Aname,Asex,Atel)
VALUES ('安鹏','男','15372720004');
INSERT INTO Administrator(Aname,Asex,Atel)
VALUES ('冉静','男','15372720004');

在这里插入图片描述

(成绩信息表)

INSERT INTO Achievement(Sid,Sname,Cid,Cname,Afs)
VALUES ('0811090101','熬霞','301','数据结构','98');
INSERT INTO Achievement(Sid,Sname,Cid,Cname,Afs)
VALUES ('0811090101','熬霞','302','计算机网络','92');
INSERT INTO Achievement(Sid,Sname,Cid,Cname,Afs)
VALUES ('0811090101','熬霞','303','java程序设计','97');
INSERT INTO Achievement(Sid,Sname,Cid,Cname,Afs)
VALUES ('0811090101','熬霞','304','项目管理','93');
INSERT INTO Achievement(Sid,Sname,Cid,Cname,Afs)
VALUES ('0811090101','熬霞','305','jsp程序设计','94');

在这里插入图片描述

(该图只是部分数据)

4.运用sql语句进行查询
  • 查询所有学生的课程编号为304(即项目管理),且成绩大于95的学生:
		select * from Achievement where(Cid=304 and Afs>95)

查询结果如下图:
在这里插入图片描述

  • 对学生的某一门课程进行查询,并按降序显示结果:
select * from Achievement order by afs desc

在这里插入图片描述

  • 关联查询:查询成绩管理表中课程为 模电,学号为01的同学的手机号码
select t1.Sname,t1.Stel from Student t1
inner join Achievement t2 on t1.Sid=t2.Sid
where t2.Cname like '模电%' and t2.Sid='01'
  • 聚合函数查询:查询课程平均分大于80的同学成绩的姓名,学号,院系,最高分,最低分,平均分,并按姓名分组,平均分倒序排列
select t1.Sid,t1.Sname,t1.spre,max(t2.afs) zgf, min(t2.afs) zdf ,avg(t2.afs) pjf 
from Student  t1
right join Achievement  t2 on t1.Sid=t2.Sid
where 1=1
group by t1.Sid,t1.Sname ,t1.spre
having avg(t2.afs) > 60
order by avg(t2.afs) desc
  • 创建视图,视图可以将不同表中的数据通过关联实现多表数据输出
		  create view newView
as
select Sid,Sname,Cname,Afs
from Achievement
where Sid=0811090104
  • 视图如下:
    在这里插入图片描述

  • 存储过程,查询上述(5) 题干查询结果中,学生编号为01的数据结果

use teaching
go
create procedure achi_pro @sid char(4)
as
select t1.Sid,t1.Sname,t1.spre,max(t2.afs) zgf, min(t2.afs) zdf ,avg(t2.afs) pjf from Student  t1
right join Achievement  t2 on t1.Sid=t2.Sid
where 1=1 and t1.sid=@sid
group by t1.Sid,t1.Sname ,t1.spre
having avg(t2.afs) > 60
order by avg(t2.afs) desc


execute achi_pro '01'

一、 问题总结

  • (1) 需求分析阶段,考虑问题不全面,以致于需求分析迟迟做不出来。
  • (2) 在绘制 ER图时,总是设计不出满意的图形,经过本人多次修改才完成以上这张感觉不错的ER图。
  • (3) 创建数据表时,为主键和外键费了很大的精力,总是不能得到满意的结果。经多次查询各种资料,完成这种关系的确立。
    在这个数据库的设计过程中,让我对SQL server 有了更多的了解,更加熟练的去使用这个数据库。对SQL语句也有更多的理解,巩固了知识的理解和运用,养成良好的动手能力,培养一种热爱思考的思维和习惯。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值