許俊
(四川職業(yè)技術(shù)學(xué)院計(jì)算機(jī)科學(xué)系,四川 遂寧 629000)
基于游標(biāo)的元組重構(gòu)應(yīng)用研究
許俊
(四川職業(yè)技術(shù)學(xué)院計(jì)算機(jī)科學(xué)系,四川遂寧629000)
抽取數(shù)據(jù)庫關(guān)系模式的多個(gè)元組的多個(gè)屬性值進(jìn)行重構(gòu),得到單個(gè)元組單一屬性的實(shí)體表示.本文以三個(gè)模式為實(shí)例,詳細(xì)分析了這類關(guān)系模式的結(jié)構(gòu),設(shè)計(jì)元組重構(gòu)算法,并基于游標(biāo)方案實(shí)現(xiàn).
數(shù)據(jù)庫;元組;重構(gòu);游標(biāo)
關(guān)系模式Student、Course、ChooseCourse的設(shè)計(jì)如下:
Student表設(shè)計(jì)
Course表
ChooseCourse表
三個(gè)模式的關(guān)系圖如下:
圖中ChooseCourse為外鍵表,Student ID引用Student(student ID),CourseID引 用Course(CourseID).
三個(gè)模式實(shí)例的模擬數(shù)據(jù)如下:
student表
CourseName表
ChooseCourse表
由三張表的模擬數(shù)據(jù)生成需求成績(jī)報(bào)表,把每個(gè)學(xué)生的選修課程、成績(jī)組合成單一列,再與學(xué)號(hào)、姓名、名次、平均分四列重構(gòu)為單一元組,其模擬形式如下:
?
依據(jù)報(bào)表形式,設(shè)計(jì)成績(jī)報(bào)表Repor ts關(guān)系模式如下:
?
在ChooseCourse表中存放了學(xué)生學(xué)號(hào)Student ID、課程編號(hào)CourseID、課程成績(jī)Mark,Student表和Course表與ChooseCourse表之間都是1:n關(guān)系,即一個(gè)學(xué)生可選修多門課,在ChooseC-ourse表有該學(xué)生多條選課成績(jī)記錄,一門課可被多名學(xué)生選修,在ChooseCourse表有該課程的多條學(xué)生成績(jī)記錄.Repor ts表一行記錄的學(xué)號(hào)、姓名直接引用Student表可得,名次和平均分是對(duì)ChooseCourse表Mark列直接計(jì)算、排名得到,科目詳細(xì)列必須是某個(gè)學(xué)生實(shí)體的全部選修課程名和成績(jī)完整組合.成績(jī)報(bào)表Repor ts將來可以鏈接到MSWord進(jìn)行郵件合并打印每個(gè)學(xué)生成績(jī)單,或發(fā)送Emai l,也能夠?yàn)镸SExcel提供數(shù)據(jù)源,方便用戶二次數(shù)據(jù)透視.
成績(jī)?cè)M數(shù)據(jù)重構(gòu)就是提取關(guān)系模式ChooseCourse中多個(gè)元組、多個(gè)屬性值重新組合為單一元組、單一屬性的過程.其算法流程圖如左:
數(shù)據(jù)重構(gòu)算法為雙重循環(huán)結(jié)構(gòu).首先查詢計(jì)算全部學(xué)生的學(xué)號(hào)、名次、平均分,在外層循環(huán)依次提取每個(gè)學(xué)號(hào),然后傳入內(nèi)層循環(huán),作為條件,查詢一個(gè)學(xué)生關(guān)聯(lián)元組的所有選修課程名、成績(jī),重構(gòu)為該學(xué)生的科目詳細(xì)描述屬性,最后在外層循環(huán)把此單一屬性值與學(xué)號(hào)、名次、平均分重構(gòu)為單一元組,即為一個(gè)學(xué)生的成績(jī)記錄.當(dāng)外層循環(huán)執(zhí)行完畢后,每個(gè)學(xué)生的成績(jī)記錄作為單一元組重構(gòu)成功.
因?yàn)閷?duì)于每一個(gè)學(xué)號(hào)Student ID列值,在查詢到與其匹配的集合后,必須逐行取出CourseName和Mark,單獨(dú)處理一行,故用基于游標(biāo)的解決方案實(shí)現(xiàn).
--內(nèi)層游標(biāo),以外層游標(biāo)的Student ID作為內(nèi)層游標(biāo)的查詢參數(shù),查詢姓名、課程名、成績(jī).
實(shí)現(xiàn)代碼采用游標(biāo)雙重嵌套,外層游標(biāo)查詢學(xué)號(hào)、名次、平均分,內(nèi)層游標(biāo)組合課程名和成績(jī)?yōu)榭颇吭敿?xì)描述單一屬性.每個(gè)學(xué)生的選修成績(jī)記錄在外層游標(biāo)的最后完整組合,持久化到Repor ts表.
[1]許俊.對(duì)非1NF關(guān)系查詢的探討[J].四川職業(yè)技術(shù)學(xué)院學(xué)報(bào),2013,(5)
[2]許俊.對(duì)Oracle多表關(guān)聯(lián)更新的應(yīng)用研究[J].四川職業(yè)技術(shù)學(xué)院學(xué)報(bào),2015,(2)
[3]蘇冠賢.數(shù)據(jù)庫游標(biāo)對(duì)檔案著錄的創(chuàng)新[J].云南檔案, 2010,(12).
責(zé)任編輯:張隆輝
TP311
A
1672-2094(2016)04-0177-03
2016-06-12
四川省教育廳重點(diǎn)科研項(xiàng)目《基于NoSQL大數(shù)據(jù)技術(shù)的信息搜索方案研究》(編號(hào):15ZA0348)、《網(wǎng)絡(luò)大數(shù)據(jù)測(cè)試基準(zhǔn)研究》(編號(hào):15ZA0349)成果之一.
許俊(1969-),男,四川蓬溪人,四川職業(yè)技術(shù)學(xué)院副教授,碩士.研究方向:軟件工程.
四川職業(yè)技術(shù)學(xué)院學(xué)報(bào)2016年4期