还剩22页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
“学生成绩管理”数据库设计文档
0、前言(一些必要的说明.)数据库说明
0.1数据库名PXSCJ逻辑名称:学生成绩数据库数据文件PXSCJ omdf日志文件PXSQ_Log登录名密码admin,:123456表命名说明
0.2成绩表,保存选课信息Cjb查询表,记录值对应信息,代表男,代表女Cxb boolean1课程表.Kcb统计表,统计成绩段分布Tjb:学生表Xsb:用户表,保存系统用户信息Yhb教师表Jsb:授课表,记录授课信息Skb:系统功能模块图
0.
3、需求分析阶段1说明学生成绩管理系统需要实现以下功能一个学生可以选修多门课程,一门课程可以由多个学生选修,学生选修一门课会有一个成绩.一个教师可以教授多个班级,一个教师也可以教授多门课程,一个班级有多个学生,一门课程也可以由多个老师来上,一个老师给一个班级上一门课有确定的时间和地点不同的用户根据身份不同拥有不同的权限.()数据流图1老师一一成绩管理,学生信息管理,权限管理一-学生成绩管理系统一成绩查询-一学生(要求用实现第一层数据流图,第二层数据流图,第三层数据流图)visi pl21zp varbinarymaxcreate tablekcb kch char3not nullprimary key,kcm char16not null,kkxq tinyint,xs tinyint,xf tinyintcreate tablecjbxh char6,kch char6,cj int,constraint clprimary key xh,kch create table yhb⑹,yhbh char6primary keynot null,yhm char8,sf varchar20mm charzbz varchar5create tablej sb j sbh char6not nullprimary key,j sxm char8,,zy varchar30fyvarchar30,zc varchar20,zw varchar20,bz varchar50create table skb j sbhchar6not null,kch char3not null,bj varchar50not null,sj varchar20,dd varchar50,constraint c2primary keyjsbh kch,bj zcreatetable tjbkch char3primary keynot null,rsl int,rs2int,rs3int,rs4int,rs5intcreatetablecxbxb bitnot null.()数据库完整性3)视图2学生选课情况视图(学号,姓名,课程号,课程名,成绩,学分,总学分,教师)createview xs_xk_viewas・zxfselect xsb XH,XM,kcbo KCH,kcm,CJ,xf,fjsb.j sbh,j sxmfrom xsb,KCB,CJB,jsb.skbwhere xsboXH=cjbo XH and kcboKCH=cjb.KCHand cjb.KCH=skb.kch andskb j sbh=j sb.j sbhselect*fromxs_xk_view)自定义数据库类型3学号,课程号可以考虑用自定义的数据类型.()sp_addtype xh,rchar6()rsP_addtype kchI char3)默认值对象4性别默认为总学分默认为Xsb XOo学生人数默认为学分默认为Kcb:40,2o计算机,信息,讲师,无Jsb:zy fyzc zwYhb:mm,123456,性别默认为Xsb1,alter tablexsb add constraint blDEFAULT1for xb总学分默认为Ooalter tablexsb add constraint b2DEFAULT0for zxf学生人数默认为Kcb:40,alter tablekcb add constraint b3DEFAULT40for xs学分默认为2oalter tablekcb add constraint b4DEFAULT2for xf计算机,Jsb:zy计算机alter tablej sbadd constraint b5DEFAULT forzy信息,fy信息,alter tablej sbaddconstraintb6DEFAULT forfy讲师,zc讲师alter tablej sbaddconstraintb7DEFAULT forzc无zw无alter tablej sbaddconstraintb8DEFAULT forzwYhbmm,123456,alter tableyhb addconstraintb9DEFAULT123456for mm规则和约束5check范围在之间Xsb:zxf0―160范围在之间,在・之间Kcb kkxqK8xf115范围在之间Cjb:cj0—100在之间Xsb:zxf0—160alter tablexsbadd constraintpk_l checkzxf between0and160在之间,在之间Kcb:kkxq1-8xf1—15alter tablekcbadd constraintpk_2check kkxqbetween1and8alter tablekcbadd constraintpk3check xfbetween1and15在之间Cjb cj0-100alter table cjbadd constraintpk_4check cjbetween0and100参照关系6参照cjb xhxsb xh参照cjbkch kcb kch参照和-必须用触发器实现yhbyhbh xsbxh jsbjsbh参照skb jsbhjsb jsbh参照skbbj xsb bj参照skb kchkcb kchcjbxh—xsb xhaltertable cjbaddconstraint fk_l foreign keyxhreferences xsb xhcjb kch-kcb kchaltertablecjbaddconstraint fk_2foreign keykch referenceskcb kchskb jsbh—jsb jsbhaltertable skbaddconstraint fk_4foreign keyj sbhreferences j sb j sbh skbkch—kcb kchaltertableskb-addconstraintfk_6foreignkeykch referenceskcbkchskb bj-xsbbj一用触发器实现create triggertl onskbfor insertasbeginif not existsselect*from xsb where bj=select bjfrom insertedbegin,插入的班级不存在!,printrollback transactionendendyhbyhbh—xsbxh和jsbjsbh必须用触发器实现alter triggert2on yhbfor insertas beginifnot existsselect*from xsb where xh=select yhbhfrom insertedbeginifnot existsselect*from j sb where j sbh=select yhbhfrom insertedbegin,插入的编号出错!printrollback transactionend endend()用户自定义函数4(把语句贴在下面)sql()用户自定义存储过程5)根据学号查询学生的选课情况1(把语句贴在下面)sql()CREATE PROCEDURExhcxxs@xh char6asbegin()if existsselect*from cjb where xh=@xhselect*from cjbwhere xh=@xhelse,无此学生选课信息,printend)根据课程号查询课程的选修情况2(把语句贴在下面)sql()CREATE PROCEDUREkchcxxk@kch char3asbegin()if existsselect*from cjbwhere kch=@kchselect*from cjbwhere kch=@kchelsef无此课程选课信息,printend根据教师编号查询授课情况(把语句贴在下面)sql()CREATE PROCEDUREjsbhcxsk@jsbh char6asbeginif existsselect*from skb where j sbh=@j sbhselect*from skb where j sbh=@j sbhelse,无此教师授课信息,printend根据班级查询该班级的授课情况3把语句贴在下面sql CREATEPROCEDURE bjcxsk@bj varchar50asbeginif existsselect*from skbwhere bj=@bjselect*from skbwhere bj=@bjelse,无此班级授课信息,printend根据课程号号查看授课情况4把语句贴在下面sqlCREATE PROCEDUREkchcxsk@kch char3asbeginif existsselect*from skbwhere kch=@kchselect*from skbwhere kch=@kchelse,无此课程授课信息,printend课程成绩分布统计存储过程名称参数课程号.实现功能把成绩表5TJ_CJ@kch CJB中指定课程按照分数段人数进行统计,放入统计表中TJB编写思路清空表,插入一行所有分数段的人数都为的所要查找的课程的记录1TJB
0.2判断所查的课程号在表中是否有记录,若有则查找出各个分数段的人数并且更新到表CJB TJB中方法一create PROCEDURE[dbo].[TJ_CJ]@kch char3astruncate tableTJBinsert into TJB values@kch,0,0,0,0,0if existsselect*from CJB where KCH=@kchbeginupdate TJBset RS1=select count*from CJBwhere CJ=0and CJ60andKCH=@kch㊀㊀update TJBsat RS2=s1ct countfrom CJBwhere CJ=60and CJ70andKCH=@kch㊀update TJBsat RS3=s lectcount*from CJBwhere CJ=70and CJ80andKCH=@kch〈update TJBset RS4=select count*from CJBwhere CJ=80and CJ90andKCH=@kchupdate TJBset RS5=select count*from CJBwhere CJ=90and CJ=100and KCH=@kchendexec TJ_CJ101’方法二如果选择统计的课程在成绩表已经存在,可以采用下列代码完成统计功能,并且代码QB效率较高但表中没有所选择的课程记录,执行的结果是各个分数段的人数为CJB nullcreateprocedure[dbo][TJ_Cj]@KCH varchar3as begindelete fromTJB insert intoTJBKCH,RSI,RS2,RS3,RS4,RS5select@KCH,〈6010sumcase when CJ then else end,=60=6910sum case when CJand CJthen elseend,70=7910sum casewhen CJ=and CJthen elseend,80〈=8910sumcasewhenCJ=and CJthen elseend,=90〈=10010sum casewhenCJand CJthenelseend from CJBwhere触发器KCH=@KCH end6实现和参照关系-必须用触发器实现1yhb yhbh-xsbxhjsbjsbh把语句贴在下面sqlcreate triggert2on yhbfor insertas begin大ifnot existsselect fromxsbwhere xh=select yhbhfrom insertedbeginifnot existsselect*from jsbwhere jsbh=select yhbhfrom inserted第一层数据流图第二层数据流图第三层数据流图(略)()数据字典2(每一个实体的详细说明)数据库编号pxscj基表编号f1基表英文名称yhb基表中文名称:用户表字段编号英文字段名字段类型备注中文字段名用户编号1Yhbh Char6用户名⑻2yhm Char身份3sf Varcha20密码4mm Char6备注5bz Varcha50说明数据库编号pxscj基表编号f2基表英文名称cjb基表中文名称成绩表字段编号英文字段名字段类型备注中文字段名学号1Xh Char6课程号2Kch Char3,插入的编号出错!1printrollback transactionendendend)实现更新学生信息和老师信息的时候用户表中的信息可以实现级联修改2(把语句贴在下面)sqlcreate triggerxsb_tigger onxsbfor updateas()if updatexhbegin()()declare@new_num varchar6,@old_num varchar6select@new_num=xh from insertedselect@old_num=xh from deletedupdate yhbsetyhbh=@new_numwhere yhbh=@old_numendcreate triggerj sb_tigger onj sbfor updateas()if updatej sbhbegin()()declare@new_num varchar6@old_num varchar6rselect@new num=j sbh frominsertedselect@old num=j sbhfrom deletedupdate yhbsetyhbh=@new_numwhere yhbh=@old_num end)当删除学生信息的时候选课记录同时删除,同时用户表的记录也删除.3(把语句贴在下面)sqlcreate triggerxsb_dl onxsb for delete asbegin()declare@xh varchar6select@xh=xh fromdeleteddelete fromcjbwherexh=@xhdelete fromyhb where yhbh=@xh end)当删除老师信息的时候授课记录也同时删除,同时用户表中的记录也删除(把语4sql句贴在下面)create triggerjsb_deletigger onjsbfordeleteasbegin()declare@j sbhvarchar6select@j sbh=j sbhfromdeleteddelete from skbwherej sbh=@j sbhdelete fromyhbwhereyhbh=@j sbhend)增加成绩时成绩大于应该给学生总学分加之这门课的学分删除成绩的时候,如果560成绩小于分,应该把学生的总学分去掉这门课的学分60(把语句贴在下面)sqlcreate triggercjb_insetigger oncjb forinsertasbegin()declare@xh varchar6declare@cj intdeclare@xf int()declare@kch char3select@xh=xh,@cj=cj,@kch=kch frominsertedselect@xf=xf fromkcb wherekch=@kch()if@cj=60beginupdate xsbsetzxf=zxf+@xfwhere xh=@xhendendcreate triggercjb_deletigger oncjb fordeleteasbegin()declare@xh varchar6declare@cj intdeclare@xf int()declare@kch char3select@xh=xh,@cj=cj,@kch=kch fromdeletedselect@xf=xf fromkcb wherekch=@kch()if@cj=60beginupdate xsbsetzxf=zxf—@xfwhere xh=@xh endend)通过触发器实现对学生选课情况视图(学号,姓名,课程号,课程名,成绩,6instead of学分,总学分,教师)的插入数据操作、更新数据操作、删除数据操作(把语句贴在下面)sql•㊀㊀cr atview vlasselect cjb.xh xm,xsb.bj,cjbo kch,kcm CJ,xf,zxf,j sboj sbh,j sxm from XSB,KCB,z zCJB,jsb,skbwherexsbXH=C JB.XHandkcb KCH=c jboKCH andjsb.j sbh=skbo j sbh andskbokch=CJB.KCH-有问题,待完善create triggervl_t onvl insteadof insertas declare@xh char6,@xm char8,@kchchar3,@kcm char16c jint,@j sbhchar6,@j sxmchar8,@bjvarchar50set@xh=select xhfrom insertedset@xm=select XMfrom insertedset@kch=select kchfrom insertedset@kcm=select kcmfrom insertedset@cj=select CJfrom insertedset@jsbh=select jsbhfrominsertedset@j sxm=select jsxmfrominsertedset@bj=select bjfrom insertedifnot existsselect*from XSBwherexh=@xh begininsertinto XSBXH,XM,bjvalues@xh,@xm,@bjendif not existsselect*from KCBwhere KCH=@kch begininsertintoKCB KCH,KCMvalues@kch,@kcm endifnotexistsselect*fromCJBwhere XH=@xh andKCH=@kch begininsertinto CJBXH,KCH,CJvalues@xh,@kch,@cjendif notexistsselect*from jsbwherejsbh=@j sbhbegininsertinto jsb jsbh,j sxmshhvalues@j r@j sxmendifnotexistsselect*fromskbwherejsbh=@jsbhand kch=@kch andbj=@bjbegininsert intoskb jsbh,kch,bj values@jsbh,@kch,@bjendEnd、运行与维护6用和把系统功能实现java sqlserver2022成绩3Cj Int说明参照学生表的;参照课程表的介于之间xh xhkch kch;cj0-100数据库编号pxscj基表编号f3基表英文名称kcb基表中文名称课程表字段编号英文字段名字段类型备注中文字段名学号1Xh Char6姓名2XM Char8性别3XB Bit出生时间4CSSJ Datetime班级5Bj Varchar50专业6Zy Char12总学分7ZXH Int联系方式8LxfsVarchar50照片9zp VarbinaryMAX10BZVarchar500说明参照学生表的;参照课程表的介于之间参照查询xh xhkch kch;cj0-
100.xb表的xb数据库编号:pxscj基表编号f4基表英文名称jsb基表中文名称:教师表字段编号英文字段名字段类型备注中文字段名教师编号1Jsbh Char6教师姓名2Jsxm Char8专业3zyVarchar30分院4FyVarchar30职称5Zc Varchar20职务6ZcVarchar207Bz Varchar50说明参照学生表的参照课程表的;介于之间xh xh;kch kchcj0-100数据库编号pxscj基表编号f5基表英文名称:kcb基表中文名称:课程表字段编号英文字段名中文字段字段类型备注名课程号1KCH Char3课程名2KCM Char16成绩3Cj Int说明参照学生表的;参照课程表的介于之间xh xhkch kch;cj0—100数据库编号pxscj基表编号f6基表英文名称:cjb基表中文名称:课程表字段编号英文字段名字段类型备注中文字段名学号1Xh Char6课程号2Kch Char33KKXQ Tinyint学生4XS tinyint学分5XF tinyint说明参照学生表的参照课程表的xh xh;kch kch;数据库编号pxscj基表编号f7基表英文名称:skb基表中文名称授课表字段编号英文字段名字段类型备注中文字段名教师编号1Jsbh Char6课程号2Kch Char3班级3BjVarchar50时间4SjVarchar50地点5dd Varchar50说明:参照教师表的;参照课程表的jsbh jsbhkch kch;数据库编号:pxscj基表编号:f8基表英文名称:CXB基表中文名称查询表字段编号英文字段名中文字段字段类型备注名性别1XB Bit性别名2XBM Char4说明、概念设计阶段2()分图1ER(两个分图」)学生和课程,)教师,课程,班级)ER2()总图2ER(由分图画出总图)ER ER、逻辑设计阶段3()表关系图1(看是否可以画出)()表结构图2结构Xsb结构Kcb结构Cjb结构Yhb结构Jsb结构Skb结构Tjb结构Cxb表优化判断每一个关系是否达到要求,如果没有达到,则继续规范33NF按照〉进行判断和优化Inf—2nf-3nfCjbxh,kch,cj码xh,kch非主属性cj因为彻底依赖于所以属于cj xh,kch,2NF因为不存在传递函数依赖,所以属于3NFCxb xb,xbm码:xbm非主属性xb因为彻底依赖于所以属于xb kch,2NF因为不存在传递函数依赖,所以属于3NFJsb jsbh,jsxm,zy,fy,zc,zw,bz码jsbh非主属性jsxm,zy,fy,zc,zw,bz因为彻底依赖于所以属于jsxm,zy,fy,zc,zw,bz kch,2NF因为不存在传递函数依赖,所以属于3NFKcb kch.kcm,kkxq,xs,xf码kch非主属性kcm,kkxq,xs,xf因为彻底依赖于,所以属于kcm,kkxq,xs,xf kch2NF因为不存在传递函数依赖,所以属于3NFSkbjsbh,kch,bj,sj,dd码jsbh,kch,hj非主属性sj,dd因为彻底依赖于(上加)所以属于s j,dd i,kdx bj,2NF因为不存在传递函数依赖,所以属于3NF()Tjb kchrsl,rs2,rs3,rs4,rs5码()kch非主属性rsl,rs2,rs3,rs4,rs5因为彻底依赖于()所以属于rsl,rs2,rs3,rs4,rs5kch,2NF因为不存在传递函数依赖,所以属于3NF()Xsb xhxm,xb,cssj,bj,zy,zxf,bz,Ixfs,zp码他)非主属性xm,xb,cssj,bj,zy,zxf,bz,Ixfs,zp因为彻底依赖于(仙,所以属于xm,xb,cssj,bj,zy,zxf,bz,Ixfs,zp2NF因为不存在传递函数依赖,所以属于3NF()Yhb vhbh,yhm,mm,bz码:()yhhh非主属性yhm,mm,bz因为彻底依赖于()所以属于yhm,mm,bz vhbh,2NF因为不存在传递函数依赖,所以属于3NF、物理设计4选择合适的(要求用)DBMS sqlserver
2022、实施(把语句贴在下面)5sql()创建数据库1(把语句贴在下面)sqlcreate databasepxscj1onz1name=pxscjl_data,f ilename=f:\pxsc jl_data.mdf,size=3mb,filegrowth=l0%log onname=pxscjl_log1,filename=f:\pxscjl_log Idf,,size=4mb maxsize=6mbo zzfilegrowth=lmb创建表2把语句贴在下面sqlcreate tablexsbxh char6not nullprimary key,xmchar8not null,xb bit,cssj datetime,bj varchar50not null,zy char12,zxf int,bzvarchar500,Ixfs varchar50,。