学生成绩管理系统数据库设计文档全.docx
- 文档编号:13169177
- 上传时间:2023-06-11
- 格式:DOCX
- 页数:28
- 大小:353.54KB
学生成绩管理系统数据库设计文档全.docx
《学生成绩管理系统数据库设计文档全.docx》由会员分享,可在线阅读,更多相关《学生成绩管理系统数据库设计文档全.docx(28页珍藏版)》请在冰点文库上搜索。
学生成绩管理系统数据库设计文档全
“学生成绩管理”数据库设计文档
0、前言(一些必要的说明。
)
0.1数据库说明
数据库名:
PXSCJ
逻辑名称:
学生成绩数据库
数据文件:
PXSCJ.mdf
日志文件:
PXSCJ_Log
登录名:
admin,密码:
123456
0.2表命名说明
Cjb:
成绩表,保存选课信息
Cxb:
查询表,记录boolean值对应信息,1代表男,0代表女。
Kcb:
课程表。
Tjb:
统计表,统计成绩段分布。
Xsb:
学生表。
Yhb:
用户表,保存系统用户信息。
Jsb:
教师表。
Skb:
授课表,记录授课信息。
0.3系统功能模块图
1、需求分析阶段
说明:
学生成绩管理系统需要实现以下功能:
一个学生可以选修多门课程,一门课程可以由多个学生选修,学生选修一门课会有一个成绩。
一个教师可以教授多个班级,一个教师也可以教授多门课程,一个班级有多个学生,一门课程也可以由多个老师来上,一个老师给一个班级上一门课有确定的时间和地点。
不同的用户根据身份不同拥有不同的权限。
(1)数据流图
老师----成绩管理,学生信息管理,权限管理---学生成绩管理系统—成绩查询--学生
(要求:
用visio实现第一层数据流图,第二层数据流图,第三层数据流图)p121
第一层数据流图
第二层数据流图
第三层数据流图(略)
(2)数据字典
(每个实体的详细说明)
数据库编号:
pxscj
基表编号:
f1
基表英文名称:
yhb
基表中文名称:
用户表
字段编号
英文字段名
中文字段名
字段类型
备注
1
Yhbh
用户编号
Char(6)
2
yhm
用户名
Char(8)
3
sf
身份
Varcha(20)
4
mm
密码
Char(6)
5
bz
备注
Varcha(50)
说明:
数据库编号:
pxscj
基表编号:
f2
基表英文名称:
cjb
基表中文名称:
成绩表
字段编号
英文字段名
中文字段名
字段类型
备注
1
Xh
学号
Char(6)
2
Kch
课程号
Char(3)
3
Cj
成绩
Int
说明:
xh参照学生表的xh;kch参照课程表的kch;cj介于0-100之间。
数据库编号:
pxscj
基表编号:
f3
基表英文名称:
kcb
基表中文名称:
课程表
字段编号
英文字段名
中文字段名
字段类型
备注
1
Xh
学号
Char(6)
2
XM
姓名
Char(8)
3
XB
性别
Bit
4
CSSJ
出生时间
Datetime
5
Bj
班级
Varchar(50)
6
Zy
专业
Char(12)
7
ZXH
总学分
Int
8
Lxfs
联系方式
Varchar(50)
9
zp
照片
Varbinary(MAX)
10
BZ
Varchar(500)
说明:
xh参照学生表的xh;kch参照课程表的kch;cj介于0-100之间。
xb参照查询表的xb
数据库编号:
pxscj
基表编号:
f4
基表英文名称:
jsb
基表中文名称:
教师表
字段编号
英文字段名
中文字段名
字段类型
备注
1
Jsbh
教师编号
Char(6)
2
Jsxm
教师姓名
Char(8)
3
zy
专业
Varchar(30)
4
Fy
分院
Varchar(30)
5
Zc
职称
Varchar(20)
6
Zc
职务
Varchar(20)
7
Bz
Varchar(50)
说明:
xh参照学生表的xh;kch参照课程表的kch;cj介于0-100之间。
数据库编号:
pxscj
基表编号:
f5
基表英文名称:
kcb
基表中文名称:
课程表
字段编号
英文字段名
中文字段名
字段类型
备注
1
KCH
课程号
Char(3)
2
KCM
课程名
Char(16)
3
Cj
成绩
Int
说明:
xh参照学生表的xh;kch参照课程表的kch;cj介于0-100之间。
数据库编号:
pxscj
基表编号:
f6
基表英文名称:
cjb
基表中文名称:
课程表
字段编号
英文字段名
中文字段名
字段类型
备注
1
Xh
学号
Char(6)
2
Kch
课程号
Char(3)
3
KKXQ
Tinyint
4
XS
学生
tinyint
5
XF
学分
tinyint
说明:
xh参照学生表的xh;kch参照课程表的kch;
数据库编号:
pxscj
基表编号:
f7
基表英文名称:
skb
基表中文名称:
授课表
字段编号
英文字段名
中文字段名
字段类型
备注
1
Jsbh
教师编号
Char(6)
2
Kch
课程号
Char(3)
3
Bj
班级
Varchar(50)
4
Sj
时间
Varchar(50)
5
dd
地点
Varchar(50)
说明:
jsbh参照教师表的jsbh;kch参照课程表的kch;
数据库编号:
pxscj
基表编号:
f8
基表英文名称:
CXB
基表中文名称:
查询表
字段编号
英文字段名
中文字段名
字段类型
备注
1
XB
性别
Bit
2
XBM
性别名
Char(4)
说明:
2、概念设计阶段
(1)分ER图
(两个分ER图,1)学生和课程,2)教师,课程,班级)
(2)总ER图
(由分ER图画出总ER图)
3、逻辑设计阶段
(1)表关系图
(看是否可以画出)
(2)表结构图
Xsb结构
Kcb结构
Cjb结构
Yhb结构
Jsb结构
Skb结构
Tjb结构
Cxb结构
(3)表优化(判断每个关系是否达到3NF要求,如果没有达到,则继续规范)
按照(1nf->2nf->3nf进行判断和优化)
Cjb(xh,kch,cj)
码:
(xh,kch)
非主属性:
cj
因为cj完全依赖于(xh,kch),所以属于2NF
因为不存在传递函数依赖,所以属于3NF
Cxb(xb,xbm)
码:
(xbm)
非主属性:
xb
因为xb完全依赖于(kch),所以属于2NF
因为不存在传递函数依赖,所以属于3NF
Jsb(jsbh,jsxm,zy,fy,zc,zw,bz)
码:
(jsbh)
非主属性:
jsxm,zy,fy,zc,zw,bz
因为jsxm,zy,fy,zc,zw,bz完全依赖于(kch),所以属于2NF
因为不存在传递函数依赖,所以属于3NF
Kcb(kch,kcm,kkxq,xs,xf)
码:
(kch)
非主属性:
kcm,kkxq,xs,xf
因为kcm,kkxq,xs,xf完全依赖于(kch),所以属于2NF
因为不存在传递函数依赖,所以属于3NF
Skb(jsbh,kch,bj,sj,dd)
码:
(jsbh,kch,bj)
非主属性:
sj,dd
因为sj,dd完全依赖于(jsbh,kch,bj),所以属于2NF
因为不存在传递函数依赖,所以属于3NF
Tjb(kch,rs1,rs2,rs3,rs4,rs5)
码:
(kch)
非主属性:
rs1,rs2,rs3,rs4,rs5
因为rs1,rs2,rs3,rs4,rs5完全依赖于(kch),所以属于2NF
因为不存在传递函数依赖,所以属于3NF
Xsb(xh,xm,xb,cssj,bj,zy,zxf,bz,lxfs,zp)
码:
(xh)
非主属性:
xm,xb,cssj,bj,zy,zxf,bz,lxfs,zp
因为xm,xb,cssj,bj,zy,zxf,bz,lxfs,zp完全依赖于(xh),所以属于2NF
因为不存在传递函数依赖,所以属于3NF
Yhb(yhbh,yhm,mm,bz)
码:
(yhbh)
非主属性:
yhm,mm,bz
因为yhm,mm,bz完全依赖于(yhbh),所以属于2NF
因为不存在传递函数依赖,所以属于3NF
4、物理设计
选择合适的DBMS(要求用sqlserver2008)
5、实施(把sql语句贴在下面)
(1)创建数据库
(把sql语句贴在下面)
createdatabasepxscj1
on
(
name='pxscj1_data',
filename='f:
\pxscj1_data.mdf',
size=3mb,
filegrowth=10%
)
logon
(
name='pxscj1_log',
filename='f:
\pxscj1_log.ldf',
size=4mb,
maxsize=6mb,
filegrowth=1mb
)
(2)创建表
(把sql语句贴在下面)
createtablexsb(
xhchar(6)notnullprimarykey,
xmchar(8)notnull,
xbbit,
cssjdatetime,
bjvarchar(50)notnull,
zychar(12),
zxfint,
bzvarchar(500),
lxfsvarchar(50),
zpvarbinary(max)
)
createtablekcb(
kchchar(3)notnullprimarykey,
kcmchar(16)notnull,
kkxqtinyint,
xstinyint,
xftinyint
)
createtablecjb(
xhchar(6),
kchchar(6),
cjint,
constraintc1primarykey(xh,kch)
)
createtableyhb(
yhbhchar(6)primarykeynotnull,
yhmchar(8),
sfvarchar(20),
mmchar(6),
bzvarchar(5)
)
createtablejsb(
jsbhchar(6)notnullprimarykey,
jsxmchar(8),
zyvarchar(30),
fyvarchar(30),
zcvarchar(20),
zwvarchar(20),
bzvarchar(50)
)
createtableskb(
jsbhchar(6)notnull,
kchchar(3)notnull,
bjvarchar(50)notnull,
sjvarchar(20),
ddvarchar(50),
constraintc2primarykey(jsbh,kch,bj)
)
createtabletjb(
kchchar(3)primarykeynotnull,
rs1int,
rs2int,
rs3int,
rs4int,
rs5int
)
createtablecxb(
xbbitnotnull,
xbmchar(4)notnullprimarykey
)
(3)数据库完整性
2)视图
学生选课情况视图(学号,姓名,课程号,课程名,成绩,学分,总学分,教师)
createviewxs_xk_view
as
selectxsb.XH,XM,kcb.KCH,kcm,CJ,xf,zxf,jsb.jsbh,jsxm
fromxsb,KCB,CJB,jsb,skb
wherexsb.XH=cjb.XHandkcb.KCH=cjb.KCH
andcjb.KCH=skb.kchandskb.jsbh=jsb.jsbh
select*fromxs_xk_view
3)自定义数据库类型
学号,课程号可以考虑用自定义的数据类型。
sp_addtype'xh','char(6)'
sP_addtype'kch','char(3)'
4)默认值对象
Xsb:
性别默认为1,总学分默认为0。
Kcb:
学生人数默认为40,学分默认为2。
Jsb:
zy计算机,fy信息,zc讲师,zw无。
Yhb:
mm’123456’
Xsb:
性别默认为1,
altertablexsbaddconstraintb1DEFAULT1forxb
总学分默认为0。
altertablexsbaddconstraintb2DEFAULT0forzxf
Kcb:
学生人数默认为40,
altertablekcbaddconstraintb3DEFAULT40forxs
学分默认为2。
altertablekcbaddconstraintb4DEFAULT2forxf
Jsb:
zy计算机,
altertablejsbaddconstraintb5DEFAULT'计算机'forzy
fy信息,
altertablejsbaddconstraintb6DEFAULT'信息'forfy
zc讲师,
altertablejsbaddconstraintb7DEFAULT'讲师'forzc
zw无。
altertablejsbaddconstraintb8DEFAULT'无'forzw
Yhb:
mm’123456’
altertableyhbaddconstraintb9DEFAULT'123456'formm
5)规则和check约束
Xsb:
zxf范围在0-160之间。
Kcb:
kkxq范围在1-8之间,xf在1-15之间
Cjb:
cj范围在0-100之间
Xsb:
zxf在0-160之间。
altertablexsb
addconstraintpk_1check(zxfbetween0and160)
Kcb:
kkxq在1-8之间,xf在1-15之间
altertablekcb
addconstraintpk_2check(kkxqbetween1and8)
altertablekcb
addconstraintpk_3check(xfbetween1and15)
Cjb:
cj在0-100之间
altertablecjb
addconstraintpk_4check(cjbetween0and100)
6)参照关系
cjb(xh)参照xsb(xh)
cjb(kch)参照kcb(kch)
yhb(yhbh)参照xsb(xh)和jsb(jsbh)–必须用触发器实现
skb(jsbh)参照jsb(jsbh)
skb(bj)参照xsb(bj)
skb(kch)参照kcb(kch)
cjb(xh)—xsb(xh)
altertablecjb
addconstraintfk_1foreignkey(xh)referencesxsb(xh)
cjb(kch)—kcb(kch)
altertablecjb
addconstraintfk_2foreignkey(kch)referenceskcb(kch)
skb(jsbh)—jsb(jsbh)
altertableskb
addconstraintfk_4foreignkey(jsbh)referencesjsb(jsbh)
skb(kch)—kcb(kch)
altertableskb
addconstraintfk_6foreignkey(kch)referenceskcb(kch)
skb(bj)—xsb(bj)--用触发器实现
createtriggert1onskb
forinsert
as
begin
ifnotexists(select*fromxsbwherebj=(selectbjfrominserted))
begin
print'插入的班级不存在!
'
rollbacktransaction
end
end
yhb(yhbh)—xsb(xh)和jsb(jsbh)--必须用触发器实现
altertriggert2onyhb
forinsert
as
begin
ifnotexists(select*fromxsbwherexh=(selectyhbhfrominserted))
begin
ifnotexists(select*fromjsbwherejsbh=(selectyhbhfrominserted))
begin
print'插入的编号出错!
'
rollbacktransaction
end
end
end
(4)用户自定义函数
(把sql语句贴在下面)
(5)用户自定义存储过程
1)根据学号查询学生的选课情况
(把sql语句贴在下面)
CREATEPROCEDURExhcxxs@xhchar(6)
as
begin
ifexists(select*fromcjbwherexh=@xh)
select*fromcjbwherexh=@xh
else
print'无此学生选课信息'
end
2)根据课程号查询课程的选修情况
(把sql语句贴在下面)
CREATEPROCEDUREkchcxxk@kchchar(3)
as
begin
ifexists(select*fromcjbwherekch=@kch)
select*fromcjbwherekch=@kch
else
print'无此课程选课信息'
end
根据教师编号查询授课情况
(把sql语句贴在下面)
CREATEPROCEDUREjsbhcxsk@jsbhchar(6)
as
begin
ifexists(select*fromskbwherejsbh=@jsbh)
select*fromskbwherejsbh=@jsbh
else
print'无此教师授课信息'
end
3)根据班级查询该班级的授课情况
(把sql语句贴在下面)
CREATEPROCEDUREbjcxsk@bjvarchar(50)
as
begin
ifexists(select*fromskbwherebj=@bj)
select*fromskbwherebj=@bj
else
print'无此班级授课信息'
end
4)根据课程号号查看授课情况
(把sql语句贴在下面)
CREATEPROCEDUREkchcxsk@kchchar(3)
as
begin
ifexists(select*fromskbwherekch=@kch)
select*fromskbwherekch=@kch
else
print'无此课程授课信息'
end
5)课程成绩分布统计。
存储过程名称TJ_CJ。
参数:
课程号(@kch)。
实现功能:
把成绩表(CJB)中指定课程按照分数段人数进行统计,放入统计表(TJB)中。
编写思路:
(1)清空TJB表,插入一行所有分数段的人数都为0的所要查找的课程的记录。
(2)判断所查的课程号在CJB表中是否有记录,若有则查找出各个分数段的人数并且更新到TJB表中。
方法一:
createPROCEDURE[dbo].[TJ_CJ](@kchchar(3))
as
truncatetableTJB
insertintoTJBvalues(@kch,0,0,0,0,0)
ifexists(select*fromCJBwhereKCH=@kch)
begin
updateTJBsetRS1=(selectcount(*)fromCJBwhereCJ>=0andCJ<60andKCH=@kch)
updateTJBsetRS2=(selectcount(*)fromCJBwhereCJ>=60andCJ<70andKCH=@kch)
updateTJBsetRS3=(selectcount(*)fromCJBwhereCJ>=70andCJ<80andKCH=@kch)
updateTJBsetRS4=(selectcount(*)fromCJBwhereCJ>=80andCJ<90andKCH=@kch)
updateTJBsetRS5=(selectcount(*)fromCJBwhereCJ>=90andCJ<=100andKCH=@kch)
end
execTJ_CJ'101'
方法二:
如果选择统计的课程在成绩表(CJB)已经存在,可以采用下列代码完成统计功能,并且代码效率较高。
但CJB表中没有所选择的课程记录,执行的结果是各个分数段的人数为null。
createprocedure[dbo].[TJ_CJ](@KCHvarchar(3))
as
begin
deletefromTJB
insertintoTJB(KCH,RS1,RS2,RS3,RS4,RS5)
select@KCH,
sum(casewhenCJ<60then1else0end),
sum(casewhenCJ>=60andCJ<=69then1else0end),
sum(casewhenCJ>=70andCJ<=79then1else0end),
sum(casewhenCJ>=80andCJ<=89then1else0end),
sum(casewhenCJ>=90andCJ<=100then1else0end)
fromCJBwhereKCH=@KCH
end
(6)触发器
1)实现yhb(yhbh)—xsb(xh)和jsb(jsbh)参照关系–必须用触发器实现
(把sql语句贴在
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 学生成绩管理系统数据库设计文档 学生 成绩管理系统 数据库 设计 文档