学生成绩管理系统数据库设计文档全Word文档下载推荐.docx
- 文档编号:17756000
- 上传时间:2022-12-09
- 格式:DOCX
- 页数:22
- 大小:22.99KB
学生成绩管理系统数据库设计文档全Word文档下载推荐.docx
《学生成绩管理系统数据库设计文档全Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《学生成绩管理系统数据库设计文档全Word文档下载推荐.docx(22页珍藏版)》请在冰豆网上搜索。
(每个实体的详细说明)
数据库编号:
pxscj
基表编号:
f1
基表英文名称:
yhb
基表中文名称:
用户表
字段编号
英文字段名
中文字段名
字段类型
备注
1
Yhbh
用户编号
Char(6)
2
yhm
用户名
Char(8)
3
sf
身份
Varcha(20)
4
mm
密码
5
bz
Varcha(50)
说明:
f2
cjb
成绩表
Xh
学号
Kch
课程号
Char(3)
Cj
成绩
Int
xh参照学生表的xh;
kch参照课程表的kch;
cj介于0-100之间。
f3
kcb
基表中文名称:
课程表
XM
姓名
XB
性别
Bit
CSSJ
出生时间
Datetime
Bj
班级
Varchar(50)
6
Zy
专业
Char(12)
7
ZXH
总学分
8
Lxfs
联系方式
9
zp
照片
Varbinary(MAX)
10
BZ
Varchar(500)
xh参照学生表的xh;
xb参照查询表的xb
数据库编号:
基表编号:
f4
jsb
教师表
Jsbh
教师编号
Jsxm
教师姓名
zy
Varchar(30)
Fy
分院
Zc
职称
Varchar(20)
职务
Bz
kch参照课程表的kch;
f5
KCH
KCM
课程名
Char(16)
cj介于0—100之间。
f6
KKXQ
Tinyint
XS
学生
tinyint
XF
学分
f7
skb
授课表
Sj
时间
dd
地点
jsbh参照教师表的jsbh;
f8
CXB
查询表
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
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
Skb(jsbh,kch,bj,sj,dd)
(jsbh,kch,bj)
sj,dd
因为sj,dd完全依赖于(jsbh,kch,bj),所以属于2NF
Tjb(kch,rs1,rs2,rs3,rs4,rs5)
rs1,rs2,rs3,rs4,rs5
因为rs1,rs2,rs3,rs4,rs5完全依赖于(kch),所以属于2NF
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
Yhb(yhbh,yhm,mm,bz)
(yhbh)
yhm,mm,bz
因为yhm,mm,bz完全依赖于(yhbh),所以属于2NF
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)创建表
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,
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)默认值对象
性别默认为1,总学分默认为0.
Kcb:
学生人数默认为40,学分默认为2。
Jsb:
zy计算机,fy信息,zc讲师,zw无。
mm’123456'
性别默认为1,
altertablexsbaddconstraintb1DEFAULT1forxb
总学分默认为0。
altertablexsbaddconstraintb2DEFAULT0forzxf
学生人数默认为40,
altertablekcbaddconstraintb3DEFAULT40forxs
学分默认为2。
altertablekcbaddconstraintb4DEFAULT2forxf
zy计算机,
altertablejsbaddconstraintb5DEFAULT'
计算机'
forzy
fy信息,
altertablejsbaddconstraintb6DEFAULT'
信息’forfy
zc讲师,
altertablejsbaddconstraintb7DEFAULT’讲师’forzc
zw无.
altertablejsbaddconstraintb8DEFAULT’无’forzw
mm’123456’
altertableyhbaddconstraintb9DEFAULT'
123456'
formm
5)规则和check约束
zxf范围在0-160之间。
kkxq范围在1—8之间,xf在1-15之间
cj范围在0—100之间
Xsb:
zxf在0-160之间。
altertablexsb
addconstraintpk_1check(zxfbetween0and160)
kkxq在1-8之间,xf在1-15之间
altertablekcb
addconstraintpk_2check(kkxqbetween1and8)
addconstraintpk_3check(xfbetween1and15)
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)
addconstraintfk_1foreignkey(xh)referencesxsb(xh)
cjb(kch)—kcb(kch)
addconstraintfk_2foreignkey(kch)referenceskcb(kch)
skb(jsbh)—jsb(jsbh)
altertableskb
addconstraintfk_4foreignkey(jsbh)referencesjsb(jsbh)
skb(kch)—kcb(kch)
addconstraintfk_6foreignkey(kch)referenceskcb(kch)
skb(bj)—xsb(bj)--用触发器实现
createtriggert1onskb
forinsert
begin
ifnotexists(select*fromxsbwherebj=(selectbjfrominserted))
print'
插入的班级不存在!
'
rollbacktransaction
end
yhb(yhbh)—xsb(xh)和jsb(jsbh)—-必须用触发器实现
altertriggert2onyhb
ifnotexists(select*fromxsbwherexh=(selectyhbhfrominserted))
ifnotexists(select*fromjsbwherejsbh=(selectyhbhfrominserted))
插入的编号出错!
(4)用户自定义函数
(5)用户自定义存储过程
1)根据学号查询学生的选课情况
CREATEPROCEDURExhcxxs@xhchar(6)
ifexists(select*fromcjbwherexh=@xh)
select*fromcjbwherexh=@xh
else
无此学生选课信息'
2)根据课程号查询课程的选修情况
CREATEPROCEDUREkchcxxk@kchchar(3)
ifexists(select*fromcjbwherekch=@kch)
select*fromcjbwherekch=@kch
print’无此课程选课信息’
根据教师编号查询授课情况
CREATEPROCEDUREjsbhcxsk@jsbhchar(6)
ifexists(select*fromskbwherejsbh=@jsbh)
select*fromskbwherejsbh=@jsbh
print’无此教师授课信息'
3)根据班级查询该班级的授课情况
CREATEPROCEDUREbjcxsk@bjvarchar(50)
ifexists(select*fromskbwherebj=@bj)
select*fromskbwherebj=@bj
无此班级授课信息'
4)根据课程号号查看授课情况
CREATEPROCEDUREkchcxsk@kchchar(3)
ifexists(select*fromskbwherekch=@kch)
select*fromskbwherekch=@kch
print’无此课程授课信息’
5)课程成绩分布统计。
存储过程名称TJ_CJ.参数:
课程号(@kch).实现功能:
把成绩表(CJB)中指定课程按照分数段人数进行统计,放入统计表(TJB)中.
编写思路:
(1)清空TJB表,插入一行所有分数段的人数都为0的所要查找的课程的记录.
(2)判断所查的课程号在CJB表中是否有记录,若有则查找出各个分数段的人数并且更新到TJB表中。
方法一:
createPROCEDURE[dbo]。
[TJ_CJ](@kchchar(3))
truncatetableTJB
insertintoTJBvalues(@kch,0,0,0,0,0)
ifexists(select*fromCJBwhereKCH=@kch)
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)
execTJ_CJ'
101'
方法二:
如果选择统计的课程在成绩表(CJB)已经存在,可以采用下列代码完成统计功能,并且代码效率较高.但CJB表中没有所选择的课程记录,执行的结果是各个分数段的人数为null。
createprocedure[dbo].[TJ_CJ](@KCHvarchar(3))
deletefromTJB
insertintoTJB(KCH,RS1,RS2,RS3,RS4,RS5)
select@KCH,
sum(casewhenCJ<
60then1else0end),
sum(casewhenCJ>
=60andCJ〈=69then1else0end),
sum(casewhenCJ〉=70andCJ〈=79then1else0end),
=80andCJ〈=89then1else0end),
=90andCJ<
=100then1else0end)
fromCJBwhereKCH=@KCH
(6)触发器
1)实现yhb(yhbh)—xsb(xh)和jsb(jsbh)参照关系–必须用触发器实现
createtriggert2onyhb
ifnotexists(select*fromxsbwherexh=(selectyhbhfrominserted))
print’插入的编号出错!
2)实现更新学生信息和老师信息的时候用户表中的信息可以实现级联修改。
createtriggerxsb_tiggeronxsb
forupdate
ifupdate(xh)
declare@new_numvarchar(6),@old_numvarchar(6)
select@new_num=xhfrominserted
select@old_num=xhfromdeleted
updateyhb
setyhbh=@new_num
whereyhbh=@old_num
createtriggerjsb_tiggeronjsbforupdate
ifupdate(jsbh)
declare@new_numvarchar(6),@old_numvarchar(6)
select@new_num=jsbhfrominserted
select@o
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 学生成绩管理系统数据库设计文档 学生 成绩管理系统 数据库 设计 文档