施利萍
武警警官学院 四川成都 610000
摘要:本文以武警支队单位为例,结合军队通用训练科目考核成绩管理系统的实际需求,按照数据库设计流程,设计和创建支撑管理系统的关系模式,并通过SQL语句对数据表设计的合理性进行验证。
关键词:体能考核;数据库设计;成绩管理
军事体育训练是提高官兵体能,培养意志品质和战斗作风的重要方式。其中全军通用训练课目考核是所有军兵种都必须完成的任务。而对军事体育训练考核成绩的及时登记建档是强化监督训练实效,促进官兵提升,形成比赶超氛围的有力保障。
1需求分析
军队通用训练科目考核成绩管理系统主要对官兵课目考核原始成绩数据进行保存,并依据考核标准和官兵个人情况计算出其各课目考核分数、个人总分以及单位总分。
系统的用户分为两大类:一是参与考核的官兵,他们通过系统可以查看个人考核成绩,单位光荣榜;二是管理者。管理者分为领导和各层级单位管理员。领导可以查看自己权限范围内的官兵及单位成绩。管理员负责导入导出考核官兵基本信息和成绩导入导出。
成绩录入是本系统的基础核心功能,其中分数的计算相对较为复杂。根据官兵年龄、性别两个因素在考核标准表中查询该官兵原始成绩的对应分数。
2概要设计
根据需求分析,系统的主要实体有参与考核的官兵、管理者。官兵的属性包括身份证号、类型、账号、密码、出生日期、性别、支队、大队、中队、班。管理者的属性包括账号名、密码、类型、层级、支队、中队、中队、班。为了规范官兵所在的部职别名称和体现层级关系,需创建一个部门实体,属性包括部门层级、部门名称、上级部门。在成绩实体中,课目反复出现,为减少数据冗余和课目名称统一规范,需创建一个课目实体,属性包括课目编号、课目名称、计量单位。每名官兵在每一次考核中有四项成绩,成绩的属性包括身份证号、课目、成绩、考核时间、分数。其中分数的计算是由数据表计算而来,不是原始数据,在下一节描述。因此系统的E-R模型如图1所示。
3逻辑设计
将E-R图向关系模型转化,根据转化原则,首先将部门、管理员、官兵、课目四个实体转化为四个关系模式。其中官兵与部门的隶属关系以在官兵实体中添加部职别属性表示,部门与管理员的隶属关系同理。由于官兵与课目之间是多对多的联系,需新建考核成绩关系模式,记录某官兵在某考核时间参与某课目的考核产生的考核成绩,为方便以后统计官兵分数,增加分数属性,该属性值由SQL语句计算而成。
为实现分数的计算,需将考核标准存于数据库。考核标准虽然是一张二维表,但不属于规范的关系模式。为方便统一管理和计算分数,需创建一个评分标准表。因此最终得成绩管理系统关系模式设计如下:部门信息表(编号,部门层级,部门名称,上级部门);管理者信息表(编号,账号名,账号密码,账号类型,权限层级,所在支队编号,所在大队编号,所在中队编号,所在班编号);官兵信息表(编号,身份证号,类型,账号名,账号密码,出生日期,所在支队编号,所在大队编号,所在中队编号,所在班队编号);课目信息表(编号,课目名称,计量单位);考核成绩登记表(编号,考核人员身份证号,考核课目,考核成绩,考核时间,考核分数);评分标准表(编号,课目,分数值,性别,年龄段开始值,年龄段结束值,成绩区间开始值,成绩区间开始值)。
4物理结构设计
本文采用SQL Server关系型数据库存储数据。
部门信息表、管理者信息表、课目信息表、考核成绩记录表、评分记录表的主键均为编号,在SQL Server中设为自动增加的标识列。官兵信息表的主键为身份证号,由于经常在查询条件和连接操作的连接条件中出现,且值唯一,该属性除是主键索引外,还设为唯一性索引。
部门信息表中的上级部门编号是外键,引用本表的编号字段。管理者信息表和官兵信息表中的所在支队、大队、中队、班均为外键,引用部门信息表中的部门编号。考核成绩表中的考核人员身份证号和考核课目均为外键,分别引用官兵信息表中的身份证号和考核课目表中的编号字段。评分信息表中课目为外键,引用课目表中的课目编号。
各个表的编号数据类型用int数据类型,考核时间用datetime数据类型,其余均采用 varchar数据类型,且根据数据量采用合适的大小。
其中,评分标准表的数据由考核标准表转化而来[1],该表可以表示各个课目的标准,例如在考核标准原始表中男子3000米跑,28岁到30岁,成绩12‘58“,12‘43”,12’18“对应的分数分别是90分和95分,100分,则在评分标准表的记录为(1,1,90,男,28,30,12’43“,12‘58”),(2,1,95,男,28,30,12‘18”,12’43”),(3,1,100,男,28,30,00‘00”,12’18”)。24岁以下age_beg记为0。考核标准表有13个年龄段,10个分数值,因此每张考核标准表有130条记录。
5系统功能支撑
为验证上述关系模式设计的合理性和科学性现使用SQL语句实现考核分数计算功能。
通用训练课目包括男子的单杠引体向上(39岁以下)和女子的单杠屈臂悬垂(39岁以下)/俯卧撑(40岁以上),仰卧起坐,30米*2蛇形跑,3000米跑。每项课目依照年龄段划分分数,其中单杠引体向上,俯卧撑以次数为计量单位,次数越大,分数越高;单杠屈臂悬垂以秒作为计量单位,值越大,分数越高;蛇形跑,3000米以秒作为计量单位,值越大,分数越低。若考核成绩大于100分的分数按照各考核项目的给出的标准加分(比如俯卧撑超出100分每递增2次增加1分);而低于55分,一律按照零分处理。
考核对象年龄以“岁”为单位,出生年月按公历计算。考核时已过当年生日者,年龄=考核年-出生年;考核时未过当年生日者,年龄=考核年-出生年-1。以计算男子3000米成绩为例,假设该官兵的ID号为“456”,出生日期为“1998-4-20”,成绩为12’01”,考核时间为2021-05-11,在kemu表中3000米的编号为1。则计算该官兵的成绩的SQL语句如下:
select score from pfenbiaozhun
where kemu=1 and gender =(select gender from cx_user where idcard='456')
and (select FLOOR(datediff(DY,birthday, '2021-05-11')/365.25)as age from cx_user where idcard='456')>=age_beg and (select FLOOR(datediff(DY,
birthday, '2021-05-11')/365.25) as age from cx_user where idcard='456') <=age_end and(substring('12''01"',1,2) +'.'+substring('12''01"',4,2))>(substring(chengji_beg,1,2)+'.'+substring(chengji_beg,4,2))and(substring('12''01"',1,2)+'.'+substring('12''01"',4,2))<=(substring(chengji_end,1,2)+'.'+substring(chengji_end,4,2))
查询的结果为90分,经验证,与考核标准表符合。最终在评分标准中依据课目,性别,年龄段,成绩所在区间定位到记录行,查询出该行score字段值,即成绩对应的分数值。
若分数超过100分,则需要特殊处理。按规定,成绩每减少5秒加1分。那么查询语句则需修改select子句为
Select score+floor((cast((substring
(chengji_end,1,2)+'.'+substring(chengji_end,4,2))asnumeric(5,2))-cast((substring('12''12"',1,2)+'.'+substring('12''12"',4,2))asnumeric(5,2)))*100/5)。同时where子句无需查找成绩所在区间,而是score=100。
对于低于55分的成绩,由上述查询语句查询无结果,在系统应用程序中可以通过判断是否无查询结果,若无查询结果,则score记录为0。因此数据表的设计能满足成绩分数的计算功能。
6小结
本文通过分析军队通用训练科目考核成绩的实际需求,设计和创建支撑成绩管理系统的数据表,数据表符合关系模型的范式要求,并通过 SQL语句验证了数据表设计的合理性。
参考文献
[1] 柳孔明,赵波,张一平.军人体能考核成绩计算系统设计与实现[J].现代计算机,2018(11).