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语句也有更多的理解,巩固了知识的理解和运用,养成良好的动手能力,培养一种热爱思考的思维和习惯。
<think>好的,用户想找数据库实训项目的案例或参考。我需要先回顾一下之前的引用内容,看看有没有相关的信息。 引用1提到数据库在线实训平台,里面有各种数据库资源,可能适合学习环境搭建。引用2讲的是教学过程中让学生安装MySQL,边学边做,这可能涉及到实训项目的结构。引用3是一个具体的Spring Boot实训项目案例管理系统,应该是一个完整的项目示例,包括源码和管理功能。引用4提到MyBatis和SQL语句的编写,可能涉及到项目中的数据库交互部分。引用5有Java连接MySQL的代码示例,可能对实训项目的代码部分有帮助。 用户可能需要的是具体的项目案例,比如学生管理系统、图书管理系统之类的常见实训项目。我需要结合这些引用,整理几个典型的案例,并说明技术栈和实现步骤。比如引用3的案例管理系统,可能包括用户管理、案例管理等功能,使用Spring Boot和MySQL,这对用户来说是一个很好的参考。 另外,用户可能需要知道如何获取这些案例,比如引用1的平台和引用3的源码地址。还要注意提到环境搭建的问题,引用2中的教学方式可能对用户有帮助,可以推荐他们使用在线平台避免环境配置的麻烦。 还要考虑用户的实际应用,可能是在校学生或者刚入门的学习者,需要结构清晰、步骤明确的案例。所以应该分点列出不同类型的项目,并给出每个项目的关键模块和技术要点,方便用户选择和实践。 最后,生成相关问题,引导用户深入学习和解决可能遇到的困难,比如如何设计数据库结构,如何优化性能,如何处理复杂查询等。这些问题可以结合引用中的内容,比如引用4提到的嵌套查询问题,或者引用5中的JDBC连接示例。</think>### 数据库实训项目案例参考与实现建议 以下是结合实训需求和实际开发场景的数据库项目案例,涵盖技术选型、功能模块及实现思路: --- #### 1. **学生信息管理系统** **技术栈**:MySQL + Java/JDBC + Spring Boot **核心模块**: - 学生表设计(学号、姓名、院系) - 课程表(课程ID、名称、学分) - 成绩管理(选课关系、分数) **实现步骤**: 1. 使用MySQL创建三张表并设置外键约束: ```sql CREATE TABLE student ( stu_id VARCHAR(20) PRIMARY KEY, name VARCHAR(50), department VARCHAR(50) ); ``` 2. 通过JDBC或MyBatis实现增删改查(示例代码见引用[5]) 3. 添加事务处理(如成绩录入的原子性操作) **应用场景**:学校教务管理、课程统计[^3][^5] --- #### 2. **电商订单管理系统** **技术栈**:MySQL + MyBatis + Spring Boot **核心模块**: - 用户表(用户ID、地址、联系方式) - 商品表(商品ID、库存、价格) - 订单表(订单号、支付状态、物流信息) **技术难点**: - 嵌套查询:通过MyBatis的`<collection>`标签实现订单与商品的关联查询 ```xml <select id="getOrderDetails" resultMap="orderResultMap"> SELECT o.*, i.item_name FROM orders o LEFT JOIN items i ON o.item_id = i.id </select> ``` **实训目标**:掌握多表联查、事务隔离级别设置[^4][^2] --- #### 3. **图书馆借阅管理系统** **技术栈**:MySQL + PHP/Python **特色功能**: - 借阅规则验证(如最大借阅数量) - 逾期罚款计算 - 图书分类统计 **数据库优化点**: - 为高频查询字段(ISBN、书名)添加索引 - 使用存储过程实现复杂业务逻辑 **参考资源**:可通过引用[1]的在线实训平台快速搭建环境[^1] --- #### 4. **医院挂号系统** **技术栈**:MySQL + Redis(缓存) + Java **并发处理**: - 通过数据库悲观锁实现号源抢占 ```sql SELECT * FROM registration WHERE id=123 FOR UPDATE ``` - 使用Redis缓存医生排班信息 **实训扩展**:结合Spring Security实现角色权限控制[^3] --- ### 如何获取完整案例资源? 1. **开源平台**:GitHub搜索关键词`database-project`,参考引用[3]的Spring Boot项目结构 2. **在线实训**:使用引用[1]的云数据库平台免环境搭建 3. **教学资源**:参考引用[2]的"教、学、做"一体化模式分阶段实现模块 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱上纯净的蓝天

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值