许俊
(四川职业技术学院计算机科学系,四川 遂宁 629000)
基于游标的元组重构应用研究
许俊
(四川职业技术学院计算机科学系,四川遂宁629000)
抽取数据库关系模式的多个元组的多个属性值进行重构,得到单个元组单一属性的实体表示.本文以三个模式为实例,详细分析了这类关系模式的结构,设计元组重构算法,并基于游标方案实现.
数据库;元组;重构;游标
关系模式Student、Course、ChooseCourse的设计如下:
Student表设计
Course表
ChooseCourse表
三个模式的关系图如下:
图中ChooseCourse为外键表,Student ID引用Student(student ID),CourseID引 用Course(CourseID).
三个模式实例的模拟数据如下:
student表
CourseName表
ChooseCourse表
由三张表的模拟数据生成需求成绩报表,把每个学生的选修课程、成绩组合成单一列,再与学号、姓名、名次、平均分四列重构为单一元组,其模拟形式如下:
?
依据报表形式,设计成绩报表Repor ts关系模式如下:
?
在ChooseCourse表中存放了学生学号Student ID、课程编号CourseID、课程成绩Mark,Student表和Course表与ChooseCourse表之间都是1:n关系,即一个学生可选修多门课,在ChooseC-ourse表有该学生多条选课成绩记录,一门课可被多名学生选修,在ChooseCourse表有该课程的多条学生成绩记录.Repor ts表一行记录的学号、姓名直接引用Student表可得,名次和平均分是对ChooseCourse表Mark列直接计算、排名得到,科目详细列必须是某个学生实体的全部选修课程名和成绩完整组合.成绩报表Repor ts将来可以链接到MSWord进行邮件合并打印每个学生成绩单,或发送Emai l,也能够为MSExcel提供数据源,方便用户二次数据透视.
成绩元组数据重构就是提取关系模式ChooseCourse中多个元组、多个属性值重新组合为单一元组、单一属性的过程.其算法流程图如左:
数据重构算法为双重循环结构.首先查询计算全部学生的学号、名次、平均分,在外层循环依次提取每个学号,然后传入内层循环,作为条件,查询一个学生关联元组的所有选修课程名、成绩,重构为该学生的科目详细描述属性,最后在外层循环把此单一属性值与学号、名次、平均分重构为单一元组,即为一个学生的成绩记录.当外层循环执行完毕后,每个学生的成绩记录作为单一元组重构成功.
因为对于每一个学号Student ID列值,在查询到与其匹配的集合后,必须逐行取出CourseName和Mark,单独处理一行,故用基于游标的解决方案实现.
--内层游标,以外层游标的Student ID作为内层游标的查询参数,查询姓名、课程名、成绩.
实现代码采用游标双重嵌套,外层游标查询学号、名次、平均分,内层游标组合课程名和成绩为科目详细描述单一属性.每个学生的选修成绩记录在外层游标的最后完整组合,持久化到Repor ts表.
[1]许俊.对非1NF关系查询的探讨[J].四川职业技术学院学报,2013,(5)
[2]许俊.对Oracle多表关联更新的应用研究[J].四川职业技术学院学报,2015,(2)
[3]苏冠贤.数据库游标对档案著录的创新[J].云南档案, 2010,(12).
责任编辑:张隆辉
TP311
A
1672-2094(2016)04-0177-03
2016-06-12
四川省教育厅重点科研项目《基于NoSQL大数据技术的信息搜索方案研究》(编号:15ZA0348)、《网络大数据测试基准研究》(编号:15ZA0349)成果之一.
许俊(1969-),男,四川蓬溪人,四川职业技术学院副教授,硕士.研究方向:软件工程.