許俊
(四川職業技術學院計算機科學系,四川 遂寧 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-),男,四川蓬溪人,四川職業技術學院副教授,碩士.研究方向:軟件工程.