当前位置:   article > 正文

中学学籍管理系统数据库课程设计,限于篇幅只能采取截图方式上传,原文件在我资源中有所展示。(1)_学籍管理系统数据库设计

学籍管理系统数据库设计

5.1 RDBMS的选择

学生管理系统课程设计小组选择的是Microsoft的SQL Server的Windows.NT版本,主要是考虑到:Microsoft SQL Server 是真正的客户机/服务器体系结构、图形化的用户界面,使系统管理更加直观简单、以及良好的对数据的导入导出能力。

5.2 数据库的创建

中学学籍管理系统数据库名称:SDbase

主文件和日志文件存放在D盘下SQLSDbase文件夹下:

主文件组名称:SDbase_Data

主文件:SDbase_Data.mdf

日志文件组名称:SDbase_Log

日志文件:SDbase_Log.ldf

考虑到中学学校每年在校生及教职工500010000人次,学校存在有办学类型小学、中学、高中,每个人的数据量1020条记录,学校大概会为学生保留信息35年的情况下,每个人数据量大概15(条记录)*10(字段)*4(汉字)*2(字节)约等于1024个字节(1/1024MB)。综上所述数据按最大增长量每年递增约10MB,考虑该系统使用周期约1020年,最大数据容量设为200MB。

SQL编程语句如下:

use master

–创建数据库

CREATE DATABASE SDbase

ON PRIMARY --主文件组

(

NAME=‘SDbase_Data’, --逻辑文件名

FILENAME=‘D:\SQLSDbase\SDbase_Data.mdf’,

SIZE=15MB, --初始大小

MAXSIZE=200MB, --最大容量

FILEGROWTH=15% --增长率

)

LOG on --日志文件

(

NAME=‘SDbase_Log’, --日志文件逻辑文件名

FILENAME=‘D:\SQLSDbase\SDbase_Log.ldf’,

SIZE=5MB,

FILEGROWTH=15% --增长率

)

GO

第六章 数据库的实施


6.1用户的建立及权限分配

SQL编程授权部分:

–创建一个DBMS访问账户

create login zhongxuexiaozu with password=‘123456’

–进入SDbase数据库

use SDbase

–创建数据库用户

–因为中学学籍管理系统只需要SDbase数据库,所以只设定访问SDbase,

create user zhongxuexiaozu for login zhongxuexiaozu with default_schema=dbo

–为zhongxuexiaozu账户授予查询、删除、更改以及插入部分表数据的权限。

grant select,insert,update,delete on StudentInfor to zhongxuexiaozu

grant select,insert,update,delete on SGuanxi to zhongxuexiaozu

grant select,insert,update,delete on SchoolInfor to zhongxuexiaozu

grant select,insert,update,delete on StudentGerenInfor to zhongxuexiaozu

grant select,insert,update,delete on xuejiUpdate to zhongxuexiaozu

grant select,insert,update,delete on UserType to zhongxuexiaozu

grant select,insert,update,delete on BubieTable to zhongxuexiaozu

grant select,insert,update,delete on BiyeSheng to zhongxuexiaozu

–因为辅助表中除了SchoolInfor表与毕业生表给与zhongxuexiaozu账户授予一定的访问权限外,

–没有对其他例如年级、部别等表进行授予增删改查的权利,因为这些表是定死的,当二次开发时若需要,再次授权即可,应用程序连接DBMS时候是无法对SDbase数据库以外的数据库进行操作,也无法SDbase中没有授权的表进行操作,在一定程度上对数据进行了保护。

6.2表的建立与数据的载入

注释上的序号是创建表的顺序,因为主外键关系;其中序号为1的表为辅助表(建库的时候里面数据是定死的,后期进行二次开发时候可以再次进行开发使用。)

use SDbase

–1创建学校信息表

Create table SchoolInfor

(ScName VARCHAR(20) , --学校名称

Sprovince VARCHAR(20) not null,–学校所在省份

SbureauEd VARCHAR(20) not null,–学校所属教育局

Saddress varchar(50) not null,–学校地址

PRIMARY KEY(ScName)

)

–1部别信息表

Create table BubieTable(Bno char(1) unique ,Bname char(4) primary key)

–1年级信息表

Create table NianjiTable(Nno char(1) unique ,Nname char(6) primary key)

–1毕业生信息表

Create table BiyeSheng(

Sno char(12),

buBie char(10),

Sname varchar(36),

primary key(Sno)

)

–2班级表

Create table classTbale --班级表

(buBie char(4) , --类别初中、高中、小学等等

nianJi char(6),

banJi char(6) not null, --班级编号

TeacherNo varchar(12) unique NOT NULL, --老师编号

TeacherName varchar(50) not NULL,

primary key(buBie,nianJi,banJi),

foreign key(buBie) references BubieTable(Bname),

foreign key(nianJi) references NianjiTable(Nname),

)

–3入学信息表

Create table StudentInfor --创建学生入学基本信息表

(enrollmentYear char(4) not null,–考虑到年份都是四位数,所以定死为char(4)类型和大小

Sno char(12), --学生学号

buBie char(4) , --入学类型(初中、高中)

nianJi char(6),

banJi char(6),

Sname varchar(50) not null, --考虑到少数名族名字

Ssex char(2) check(Ssex in(‘男’,‘女’)),

Nationnality varchar(30) not null, --民族

placeBirth varchar(20)not null, --籍贯

birthDate Date not null, --出生日期

graduatedUniversity VARCHAR(20) not null,–毕业学校

enrollmentScore smallint check(enrollmentScore>=0),–总分

sourceUpdate char(10) not null, --来源/变动类型

muqianZhuangtai Varchar(30), --变动原因

PRIMARY KEY (Sno), --主键

foreign key(buBie) references BubieTable(Bname),

foreign key(nianJi) references NianjiTable(Nname),

)

–4创建学生个人情况

Create table StudentGerenInfor

(Sno char(12), --学号

mianMao char(12) not null, --政治面貌

shenTi char(10) , --身体状况

jiaTingRenKou char(2), --家庭人口

homeAdress VARCHAR(30) not null,–家庭住址

TemlePhone char(11) not null, --联系方式11位的手机号

PRIMARY KEY(Sno),

FOREIGN KEY (Sno) references StudentInfor(Sno)

)

–4创建学生主要关系表

Create table SGuanxi

(Sno char(12),

chengWei char(4), --与本人关系。,

Name varchar(50) NOT NULL, --姓名

Age CHAR(3) NOT NULL, --年龄

DanWei VARCHAR(50)NOT NULL, --单位

PRIMARY KEY (Sno,chengWei,Name), --考虑到一个人有多个家庭成员,但是可以有相同称谓的姐姐、弟弟,标识唯一一行

FOREIGN KEY (Sno) references StudentInfor(Sno)

)

–4学籍更改表

Create table xuejiUpdate

(

Sno char(12), --学号

updateType char(4), --变更类型

updateDate DATETime, --变更日期

yuanYin varchar(50), --变更原因

SendOrYanZheng VARCHAR(50), --发给或缴纳证件

PRIMARY KEY(Sno,updateDate),

foreign key (Sno) references StudentInfor(Sno)

)

–4创建系统用户

Create table UserType

(userID varchar(12), --用户名

userPassWord varchar(18), --账户实际操作人姓名

name varchar(50), --密码

dengJi char(1), --权限等级

shuoMing varchar(50), --权限说明

primary key (userID) --主键

)

6.3视图、触发器、存储过程设计

视图:

–用户权限视图

Create view User_type as

select userID as 账户,userPassWord as 密码 ,name as 姓名,dengji as 权限等级,

shuoMing as 权限说明 from UserType

应用程序通过嵌入SQL语句(用户模式:视图语句),一定程度上对数据的安全性进行了保护,

触发器:

–1当学生入学成绩成绩小于460时候,学生的录取类型为借读生。

CREATE TRIGGER Student_fenshu ON StudentInfor --该触发器建在学生入学表生

FOR INSERT --触发器类型 插入记录时候

as

declare e1 cursor for

select Sno,enrollmentScore,muqianZhuangtai from inserted --触发器名称 e1

declare @Sno char(12)

declare @enrollmentScore smallint

declare @sourceUpdate char(10)

OPEN e1

fetch NEXT FROM e1 into @Sno,@enrollmentScore,@sourceUpdate

WHILE @@FETCH_STATUS=0 – 当返回值为0时候继续执行Begin下语句,知道返回值为-1或者非0

BEGIN

IF @enrollmentScore <=460 --入过入学分数小于或者等于460

update StudentInfor set sourceUpdate=‘借读’ --把当前已经输入的入读类型为借读,即使之前是其他也会更改为借读

where @Sno=Sno

fetch next from e1 into @Sno,@enrollmentScore,@sourceUpdate --条件为0时候继续遍历临时表中的记录,知道条件为非0

end

close e1 --遍历游标 e1

DEALLOCATE e1 --释放游标

–2学籍管理,当学生毕业时候,在学籍变动表中,为学生发放毕业证

Create TRIGGER Student_biye ON xuejiUpdate

FOR insert --触发器类型 插入记录时候

as

declare e_biye cursor for

select Sno,updateType,SendOrYanZheng from inserted

declare @Sno varchar(36)

declare @updateType char(4)

declare @SendOrYanZheng VARCHAR(50)

OPEN e_biye

fetch NEXT FROM e_biye into @Sno,@updateType,@SendOrYanZheng

WHILE @@FETCH_STATUS=0

BEGIN

if @updateType=‘毕业’ --如果学籍异动表中出现一个新的异动类型为毕业

BEGIN

update xuejiUpdate set SendOrYanZheng=‘发给毕业证’ where @Sno=Sno --那么发给毕业证

END

fetch next from e_biye into @Sno,@updateType,@SendOrYanZheng

end

close e_biye

DEALLOCATE e_biye

–3当学生状态为毕业状态时候,自动把所有毕业生的信息导入到一张毕业生表中去。

CREATE TRIGGER biye_tig ON StudentInfor

FOR update

as

declare e_insertBiye cursor for select Sno,Sname,buBie,sourceUpdate from inserted

declare @Sno char(12)

declare @Sname varchar(36)

declare @buBie char(4)

declare @sourceUpdate char(10)

OPEN e_insertBiye

fetch NEXT FROM e_insertBiye into @Sno,@Sname,@buBie,@sourceUpdate

WHILE @@FETCH_STATUS=0

BEGIN

–当我更改变动类型时候,而且满足变动类型为毕业,那么毕业生信息导入到毕业生到BiyeSheng表中

if update(sourceUpdate) and @sourceUpdate=‘毕业’

insert into BiyeSheng values(@Sno,@Sname,@buBie)

fetch next from e_insertBiye into @Sno,@Sname,@buBie,@sourceUpdate

end

close e_insertBiye

DEALLOCATE e_insertBiye

–4当学生学籍状态发生改变时候例如请假转班或者进行毕业,

–把学籍异动信息进行存储到学籍异动表中,每次变动都会添加一条记录,主键是学号+日期。

Create TRIGGER Student_baingeng ON StudentInfor

FOR update

as

declare e cursor for select Sno,muqianZhuangtai,sourceUpdate from inserted

declare @Sno varchar(36)

declare @muqianZhuangtai char(10)

declare @sourceUpdate char(10)

OPEN e

fetch NEXT FROM e into @Sno,@muqianZhuangtai,@sourceUpdate

while @@FETCH_STATUS=0

BEGIN

if update(sourceUpdate)

BEGIN

insert into xuejiUpdate values(@Sno,@sourceUpdate,getDate(),@muqianZhuangtai,‘无’)

END

fetch next from e into @Sno,@muqianZhuangtai,@sourceUpdate

end

close e

DEALLOCATE e

–5当学校录取一名学生时候,为该生创建一个学籍管理系统的学生账户。

CREATE TRIGGER Student_Chufa ON StudentInfor

FOR INSERT

as

declare e cursor for select Sno,Sname from inserted

declare @Sno varchar(36)

declare @Sname varchar(36)

OPEN e

fetch NEXT FROM e into @Sno,@Sname

WHILE @@FETCH_STATUS=0

BEGIN

–创建账户,的登录账户为学号,姓名为学生姓名,权限代码为4,默认为学生

insert into UserType values(@Sno,123456,@Sname,4,‘学生’)

fetch next from e into @Sno,@Sname

end

close e

DEALLOCATE e

–6创建一个新班级时候,为该班班主任老师授予查询该班学生信息的权利

CREATE TRIGGER Class_Table ON classTbale

FOR INSERT

as

declare e cursor for select TeacherNo,TeacherName from inserted

declare @TeacherNo varchar(12)

declare @TeacherName varchar(50)

OPEN e

fetch NEXT FROM e into @TeacherNo,@TeacherName

WHILE @@FETCH_STATUS=0

BEGIN

insert into UserType values(@TeacherNo,123456,@TeacherName,2,‘老师’)

fetch next from e into @TeacherNo,@TeacherName

end

close e

DEALLOCATE e

存储过程

创建存储过程:

–创建一个查询系统用户表存储过程.

Create procedure Select_UserType

as

begin

select userID,userPassWord,name,dengJi,shuoMing from UserType

set nocount on;

end

Go

执行存储过程:

USE [SDbase]

GO

DECLARE @return_value int

EXEC @return_value = [dbo].[Select_UserType]

SELECT ‘Return Value’ = @return_value

GO

执行结果:

级联更新与删除:

当我们要从数据库中删除一个学生的信息时候,要同时删除4张表的信息(学生入学表信息,学生的家庭关系,学生个人情况,以及学生学籍变动情况表),按原则上讲师需要对学生的访问系统账户一通删除的,但是本系统的学生用户表(系统用户表中包含学生老师与其他管理员信息)没有与学生入学表进行建立级联删除与更新,因为用户表没有与学生入学表建立参照关系,这是一个重要的原因,其次原因是因为,表中还拥有老师与管理员的数据,要想实现当删除学生的时候同时也删除学生的账户,可以把学生账户与系统账户所分开,或者通过应用程序段建立删除,本系统是在建立完物理逻辑结构后,通过修改列级约束进行添加的。

–对参照StudentInfor学生入学表的表建立级联更新与删除

alter table StudentGerenInfor add constraint a_Sno foreign key(Sno) references StudentInfor(Sno) on delete cascade

alter table SGuanxi add constraint b_Sno foreign key(Sno) references StudentInfor(Sno) on delete cascade

alter table xuejiUpdate add constraint c_Sno foreign key(Sno) references StudentInfor(Sno) on delete cascade

数据载入:

数据载入遵循,被参照表先进行插入的原则,数据删除是参照表先删除原则,两者相反。

辅助表的信息先插入,因为主表的信息都是与辅助表的关系是参照表与被参照表的关系,

所以辅助表先插入

辅助表数据插入:

–1插入学校信息(学校名称、所在省份、所属教育局、学校地址)

insert into SchoolInfor values(‘黄石理工附中’,‘湖北省’,‘黄石市教育局’,‘黄石市下陆区团城山街道’)

insert into SchoolInfor values(‘黄石二中’,‘湖北省’,‘黄石市教育局’,‘黄石市下陆区扬州路’)

–1插入部别表

insert into BubieTable values(1 ,‘初中’)

insert into BubieTable values(2 ,‘高中’)

insert into BubieTable values(3,‘小学’)

–1插入年级表

insert into NianjiTable values(1 ,‘一年级’)

insert into NianjiTable values(2 ,‘二年级’)

insert into NianjiTable values(3 ,‘三年级’)

insert into NianjiTable values(4 ,‘四年级’)

insert into NianjiTable values(5 ,‘五年级’)

insert into NianjiTable values(6 ,‘六年级’)

–1插入学校信息(学校名称、所在省份、所属教育局、学校地址)

insert into SchoolInfor values(‘黄石理工附中’,‘湖北省’,‘黄石市教育局’,‘黄石市下陆区团城山街道’)

insert into SchoolInfor values(‘黄石二中’,‘湖北省’,‘黄石市教育局’,‘黄石市下陆区扬州路’)

主表信息插入:

–插入班级表(部别、年级、班级编号、老师编号、老师姓名)

insert into classTbale values(‘高中’,‘一年级’,‘一班’,‘10088’,‘扬眉老师’);

insert into classTbale values(‘高中’,‘一年级’,‘二班’,‘10089’,‘镇元子老师’);

insert into classTbale values(‘高中’,‘二年级’,‘一班’,‘20099’,‘孙悟空老师’);

insert into classTbale values(‘初中’,‘一年级’,‘一班’,‘11088’,‘菩提祖师’);

insert into classTbale values(‘初中’,‘二年级’,‘一班’,‘12088’,‘如来佛祖’);

–插入学生信息(入学年份(4位)、学号(12位)、入学类型、年级、班级、姓名、性别(男/女)、民族、籍贯、出生日期、毕业学校、总分、来源、变动原因)

–学校录取学生时候,由招生办老师提供的名单,当录取学生的时候,

–同时为该学生提供一个系统账户,账户名为学生的学号,密码默认为123456,账户类型为学生账户

insert into StudentInfor values(‘2020’,‘202020491111’,‘初中’,‘一年级’,‘1’,‘余欣’,‘女’,‘汉族’,‘襄阳’,‘1999-01-28’,‘湖北理工’,‘480’,‘录取’,‘无’);

insert into StudentInfor values(‘2016’,‘201616491110’,‘初中’,‘二年级’,‘2’,‘张一’,‘男’,‘汉族’,‘恩施’,‘1997-11-06’,‘湖北理工’,‘490’,‘录取’,‘无’);

insert into StudentInfor values(‘2017’,‘201717491101’,‘初中’,‘三年级’,‘3’,‘张二’,‘女’,‘汉族’,‘十堰’,‘1998-01-01’,‘湖北理工’,‘510’,‘休学’,‘无’);

insert into StudentInfor values(‘2020’,‘202020491155’,‘高中’,‘一年级’,‘1’,‘张四’,‘女’,‘汉族’,‘宣恩’,‘2000-01-11’,‘湖北理工’,‘489’,‘休学’,‘无’);

insert into StudentInfor values(‘2017’,‘201717491170’,‘高中’,‘二年级’,‘2’,‘张五’,‘女’,‘汉族’,‘洛阳’,‘1997-12-25’,‘湖北理工’,‘490’,‘录取’,‘无’);

insert into StudentInfor values(‘2018’,‘201616491180’,‘高中’,‘三年级’,‘3’,‘张六’,‘女’,‘汉族’,‘商丘’,‘1998-03-03’,‘湖北理工’,‘470’,‘录取’,‘无’);

个人信息插入:

–录入学生的个人情况

insert into StudentGerenInfor values(‘202020491111’,‘团员’,‘健康’,‘5’,‘襄阳’,‘10010100861’);

insert into StudentGerenInfor values(‘201616491110’,‘团员’,‘健康’,‘3’,‘恩施’,‘10086100861’);

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)

img

最后

我还为大家准备了一套体系化的架构师学习资料包以及BAT面试资料,供大家参考及学习

已经将知识体系整理好(源码,笔记,PPT,学习视频)

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
朋友,同时减轻大家的负担。**[外链图片转存中…(img-vDYSmz3y-1713501628029)]

[外链图片转存中…(img-Po9xSUuj-1713501628031)]

[外链图片转存中…(img-BhpU20aY-1713501628034)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)

img

最后

我还为大家准备了一套体系化的架构师学习资料包以及BAT面试资料,供大家参考及学习

已经将知识体系整理好(源码,笔记,PPT,学习视频)

[外链图片转存中…(img-k8JOMepw-1713501628035)]

[外链图片转存中…(img-eMnkOS8E-1713501628037)]

[外链图片转存中…(img-yfezvmIS-1713501628038)]

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Guff_9hys/article/detail/745732
推荐阅读
相关标签
  

闽ICP备14008679号