版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、第十四章第十四章 關(guān)聯(lián)對(duì)象訪問關(guān)聯(lián)對(duì)象訪問Associative Object Access 本章重點(diǎn)講述本章重點(diǎn)講述GOM對(duì)關(guān)聯(lián)對(duì)象查詢的支持,即如對(duì)關(guān)聯(lián)對(duì)象查詢的支持,即如何實(shí)現(xiàn)一個(gè)查詢和如何描畫用戶的查詢要求何實(shí)現(xiàn)一個(gè)查詢和如何描畫用戶的查詢要求 在在O-O DBMS中,實(shí)現(xiàn)一個(gè)查詢是經(jīng)過多態(tài)的中,實(shí)現(xiàn)一個(gè)查詢是經(jīng)過多態(tài)的Select函數(shù)來實(shí)現(xiàn)的函數(shù)來實(shí)現(xiàn)的 GOM支持二種查詢言語支持二種查詢言語GOMql、GOMsql 其中其中GOMql是基于關(guān)系言語是基于關(guān)系言語QUEL在面向?qū)ο笊显诿嫦驅(qū)ο笊系臄U(kuò)展的擴(kuò)展 GOMsql是是SQL在面向?qū)ο笊系臄U(kuò)展在面向?qū)ο笊系臄U(kuò)展 關(guān)聯(lián)查詢的操作對(duì)
2、象為:類型范圍關(guān)聯(lián)查詢的操作對(duì)象為:類型范圍(Type Extention),用戶定義的集合對(duì)象和表對(duì)象,用戶定義的集合對(duì)象和表對(duì)象多態(tài)的關(guān)聯(lián)選擇操作定義及其實(shí)現(xiàn)多態(tài)的關(guān)聯(lián)選擇操作定義及其實(shí)現(xiàn) 關(guān)聯(lián)選擇操作需求一個(gè)操作對(duì)象闡明關(guān)聯(lián)選擇操作需求一個(gè)操作對(duì)象闡明在在某個(gè)對(duì)象實(shí)例集合上,需求一個(gè)條件表達(dá)某個(gè)對(duì)象實(shí)例集合上,需求一個(gè)條件表達(dá)式作為選擇的根據(jù)式作為選擇的根據(jù)選擇謂詞選擇謂詞 當(dāng)定義一個(gè)多態(tài)的選擇操作時(shí),選擇謂詞當(dāng)定義一個(gè)多態(tài)的選擇操作時(shí),選擇謂詞將以函數(shù)變?cè)姆绞阶鳛椴僮髯冊(cè)獙⒁院瘮?shù)變?cè)姆绞阶鳛椴僮髯冊(cè)?中選擇謂詞本身需求參數(shù)時(shí),該參數(shù)必需中選擇謂詞本身需求參數(shù)時(shí),該參數(shù)必需在選擇操作
3、的參數(shù)表中闡明在選擇操作的參數(shù)表中闡明 多態(tài)的選擇操作的共同名字為多態(tài)的選擇操作的共同名字為Select無參數(shù)的選擇謂詞無參數(shù)的選擇謂詞簡單的布爾函數(shù)簡單的布爾函數(shù) 多態(tài)選擇操作闡明為多態(tài)選擇操作闡明為Polymorph overload select (t1 bool ) - t1 Code selectNoParam 語義為語義為 類型類型t1,是一個(gè)集合類型,其元素類型為,是一個(gè)集合類型,其元素類型為t2 Select操作有兩個(gè)變?cè)航邮苷哳愋蜑椴僮饔袃蓚€(gè)變?cè)航邮苷哳愋蜑閠1,另一個(gè)變?cè)且粋€(gè)布爾函數(shù),它對(duì)類型為另一個(gè)變?cè)且粋€(gè)布爾函數(shù),它對(duì)類型為t2的對(duì)象進(jìn)展選擇,前往一個(gè)布爾型結(jié)果
4、的對(duì)象進(jìn)展選擇,前往一個(gè)布爾型結(jié)果 Select語義對(duì)語義對(duì)t1的元素用布爾函數(shù)進(jìn)展挑選;的元素用布爾函數(shù)進(jìn)展挑選;多態(tài)選擇操作的實(shí)現(xiàn)多態(tài)選擇操作的實(shí)現(xiàn) define selectNoParam(selPred) is var result: t1; candidate: t2; begin result.create; ! 生成空結(jié)果集生成空結(jié)果集 foreach (candidate in self) i f c a n d i d a t e . s e l P r e d t h e n result.insert(candidate); return result; end defi
5、ne selectNoParam運(yùn)用舉例運(yùn)用舉例 在立方體實(shí)例庫中,查找某一個(gè)頂點(diǎn)是原點(diǎn)的立在立方體實(shí)例庫中,查找某一個(gè)頂點(diǎn)是原點(diǎn)的立方體方體 分析:其選擇謂詞需求依次檢查一個(gè)立方體的分析:其選擇謂詞需求依次檢查一個(gè)立方體的8個(gè)點(diǎn),能否有一個(gè)點(diǎn)的個(gè)點(diǎn),能否有一個(gè)點(diǎn)的x、y、z坐標(biāo)值為坐標(biāo)值為0,0 inOrigin 操作操作 其結(jié)果該當(dāng)是下面二個(gè)集合的交集:其結(jié)果該當(dāng)是下面二個(gè)集合的交集: 包含在立方體實(shí)例集合中的實(shí)例包含在立方體實(shí)例集合中的實(shí)例myCuboid所援用所援用 滿足謂詞滿足謂詞inOrigin 的實(shí)例的實(shí)例 多態(tài)的多態(tài)的Select操作可以運(yùn)用于任何一個(gè)集合類型操作可以運(yùn)用于任何
6、一個(gè)集合類型 inOrigin定義定義declare inOrigin: Cuboid | bool; define inOrigin is !判別任何一個(gè)頂點(diǎn)能判別任何一個(gè)頂點(diǎn)能否處于坐標(biāo)原點(diǎn)否處于坐標(biāo)原點(diǎn) return ( self.v1.x=0.0 and self.v1.y=0.0 and self.v1.z=0.0 OR self.v8.x=0.0 and self.v8.y=0.0 and self.v8.z=0.0 ); 變量定義和援用變量定義和援用var myCuboids, theCuboidsInOrigin:CuboidSet; theCuboidsInOrigin:=m
7、yCuboids.select(inOrigin);例如例如2查詢退休職員查詢退休職員declare isRetired: Employee | bool; var retiredEmps: EmployeeSet; retiredEmps:=ext(Employee).select(isRetired);例如例如3無名的選擇謂詞的運(yùn)用無名的選擇謂詞的運(yùn)用 當(dāng)布爾選擇謂詞比較簡單,那么可以當(dāng)布爾選擇謂詞比較簡單,那么可以 符號(hào)來實(shí)符號(hào)來實(shí)現(xiàn)操作過程的傳送現(xiàn)操作過程的傳送 例如:選擇紅色蘋果的選擇操作例如:選擇紅色蘋果的選擇操作 .選擇謂詞用命名選擇謂詞用命名isRed表達(dá)表達(dá)declare i
8、sRed: Apple |bool; define isRed is .選擇謂詞用選擇謂詞用表達(dá)表達(dá)直接傳送過程直接傳送過程redApples:=myApples.select ( x: x.color = “red) GoldCuboid=mycuboid.select ( x: = “gold)帶參數(shù)的選擇謂詞帶參數(shù)的選擇謂詞 該參數(shù)是為選擇謂詞效力的,所以需求在該參數(shù)是為選擇謂詞效力的,所以需求在謂詞函數(shù)中闡明謂詞函數(shù)中闡明 由于在援用時(shí),顯然需求由由于在援用時(shí),顯然需求由Select來援用,來援用,因此,在因此,在Select的參數(shù)表中也要闡明,規(guī)的參數(shù)表中也要闡
9、明,規(guī)那么如下:那么如下:poly overload select (t1 bool), t3 - t1 語義:其中類型語義:其中類型t3可以是任何類型,它的可以是任何類型,它的約束條件是約束條件是Select的第三個(gè)參數(shù)類型的第三個(gè)參數(shù)類型t3,必需與選擇謂詞所需一個(gè)參數(shù)類型一致必需與選擇謂詞所需一個(gè)參數(shù)類型一致Select的重載的重載 Select函數(shù)不但是多態(tài)的,而且是重載的,函數(shù)不但是多態(tài)的,而且是重載的,它可以根據(jù)選擇謂詞的需求,設(shè)定多個(gè)參它可以根據(jù)選擇謂詞的需求,設(shè)定多個(gè)參數(shù)數(shù) 編譯器根據(jù)重載規(guī)那么,從參數(shù)的個(gè)數(shù),編譯器根據(jù)重載規(guī)那么,從參數(shù)的個(gè)數(shù),尋覓到正確的實(shí)現(xiàn)版本尋覓到正確的
10、實(shí)現(xiàn)版本 其約束條件為:在啞、實(shí)結(jié)合時(shí),其約束條件為:在啞、實(shí)結(jié)合時(shí),Select的參數(shù)個(gè)數(shù)和各自類型必需與選擇謂詞的的參數(shù)個(gè)數(shù)和各自類型必需與選擇謂詞的參數(shù)個(gè)數(shù)、類型完全一致參數(shù)個(gè)數(shù)、類型完全一致例如例如1一個(gè)參數(shù)的選擇謂詞一個(gè)參數(shù)的選擇謂詞 對(duì)對(duì)Cuboid定義一個(gè)選擇謂詞定義一個(gè)選擇謂詞bigCuboid,它能選擇體積大于某個(gè)閾值的立方體對(duì)象它能選擇體積大于某個(gè)閾值的立方體對(duì)象 定義定義declare bigCuboid: Cuboid | float - boolcode bigCuboidCode; define bigCuboidCode(threshold) isreturn(s
11、elf.volume threshold); 援用援用 var myCuboids, myBigCuboids: CuboidSet; myBigCuboids:= myCuboids.select(bigCuboid, 200.0);例如例如2二個(gè)參數(shù)的選擇謂詞二個(gè)參數(shù)的選擇謂詞 選擇體積在一個(gè)范圍選擇體積在一個(gè)范圍(上限上限high,下限為,下限為low)的立方體的立方體declare volumeRange: Cuboid | float, float - bool; define volumeRange(low, high) isreturn (self.volume=low);迭代迭
12、代Iterators 可以在挑選的根底上利用循環(huán)進(jìn)展各種進(jìn)一步的可以在挑選的根底上利用循環(huán)進(jìn)展各種進(jìn)一步的操作操作 例如:求符合體積要求的例如:求符合體積要求的Cylinders的體積累加值的體積累加值declare bigCyl: Cylinder | float - boolcode bigCylCode; define bigCylCode(threshold)return(self.volume= threshold); var c: Cylinder;myCylinders: CylinderSet;bigCylindersTotalWeight: float:=0.0; forea
13、ch (c in myCylinders.select(bigCyl, 20.0)bigCylindersTotalWeight:=bigCylindersTotalWeight + c.weight;闡明性查詢言語闡明性查詢言語GOMql 多態(tài)選擇函數(shù)只是一個(gè)關(guān)聯(lián)查詢實(shí)現(xiàn)的根底,對(duì)多態(tài)選擇函數(shù)只是一個(gè)關(guān)聯(lián)查詢實(shí)現(xiàn)的根底,對(duì)于復(fù)雜的嵌套查詢及其優(yōu)化,表達(dá)力度不夠,需于復(fù)雜的嵌套查詢及其優(yōu)化,表達(dá)力度不夠,需求經(jīng)過定義相關(guān)的查詢言語來實(shí)現(xiàn)求經(jīng)過定義相關(guān)的查詢言語來實(shí)現(xiàn) 查詢優(yōu)化有兩個(gè)方面處理查詢優(yōu)化有兩個(gè)方面處理 關(guān)系代數(shù)的優(yōu)化:編譯時(shí)進(jìn)展關(guān)系代數(shù)的優(yōu)化:編譯時(shí)進(jìn)展 物理查詢途徑的優(yōu)化:執(zhí)行時(shí)進(jìn)
14、展物理查詢途徑的優(yōu)化:執(zhí)行時(shí)進(jìn)展 下面的內(nèi)容從用戶角度出發(fā),如何查詢需求正確下面的內(nèi)容從用戶角度出發(fā),如何查詢需求正確地用相應(yīng)的查詢言語序列來表達(dá)地用相應(yīng)的查詢言語序列來表達(dá) GOMql是基于是基于QUEL的擴(kuò)展的擴(kuò)展一個(gè)對(duì)象實(shí)例庫一個(gè)對(duì)象實(shí)例庫 類型定義類型定義Type Emp is name:string ; working:Dept; salary:int; type Dept is name:string; mgr:Manager; profit:int;Type Manager Supertype Emp is cars:Car; type Car is license:string
15、; make:string; horsepower:int; 途徑表達(dá)式為查找援用鏈的援用序列途徑表達(dá)式為查找援用鏈的援用序列例如:例如:Emp.worksIn.mgr.cars.make 例如的類型定義中,關(guān)聯(lián)對(duì)象的聯(lián)接,僅例如的類型定義中,關(guān)聯(lián)對(duì)象的聯(lián)接,僅僅采用一個(gè)進(jìn)入點(diǎn)的方式僅采用一個(gè)進(jìn)入點(diǎn)的方式worksIn-mgr-cars- - -make-Emp Dept Manager Car stringEMPworkInDeptN1DeptmgrManager11ManagercarsCarNMGOMql表達(dá)式表達(dá)式 單目的查詢表達(dá)式單目的查詢表達(dá)式rang r1:s1,rm:smret
16、rieve riwhere p(r1, rm) 多目的查詢表達(dá)式多目的查詢表達(dá)式rang r1:s1,rm:smretrieve a1:r1,aj:rjwhere p(r1, rm) Range子句:范圍闡明子句子句:范圍闡明子句其中:其中:rj1jm為范圍變量表達(dá)式,為范圍變量表達(dá)式,它用于它用于range子句中子句中其中,其中,sj1jm必需是以下情況之一必需是以下情況之一Sj是一個(gè)類型擴(kuò)展是一個(gè)類型擴(kuò)展EXT(用類型名表達(dá)用類型名表達(dá))一個(gè)集合對(duì)象變量一個(gè)集合對(duì)象變量一個(gè)列表對(duì)象變量一個(gè)列表對(duì)象變量一個(gè)包含有集合構(gòu)造的對(duì)象變量一個(gè)包含有集合構(gòu)造的對(duì)象變量一個(gè)包含有表構(gòu)造的對(duì)象變量一個(gè)包含
17、有表構(gòu)造的對(duì)象變量一個(gè)計(jì)算一個(gè)集合構(gòu)造對(duì)象的表達(dá)式一個(gè)計(jì)算一個(gè)集合構(gòu)造對(duì)象的表達(dá)式一個(gè)計(jì)算一個(gè)表構(gòu)造對(duì)象的表達(dá)式一個(gè)計(jì)算一個(gè)表構(gòu)造對(duì)象的表達(dá)式總之,變量總之,變量rj被約束到一個(gè)相應(yīng)的聚集類型被約束到一個(gè)相應(yīng)的聚集類型sj的元素類型的元素類型 retrieve子句子句 查詢闡明子句查詢闡明子句 簡單方式:只需一個(gè)范圍變量簡單方式:只需一個(gè)范圍變量單目的單目的查詢查詢 復(fù)雜方式:經(jīng)過投影到多個(gè)范圍變量,構(gòu)復(fù)雜方式:經(jīng)過投影到多個(gè)范圍變量,構(gòu)造的多元組造的多元組多目的查詢多目的查詢 實(shí)現(xiàn)方法:對(duì)目的的范圍變量與相應(yīng)的對(duì)實(shí)現(xiàn)方法:對(duì)目的的范圍變量與相應(yīng)的對(duì)象分別進(jìn)展捆綁,并進(jìn)展選擇謂詞查詢象分別進(jìn)展
18、捆綁,并進(jìn)展選擇謂詞查詢 Where子句:選擇謂詞中,子句:選擇謂詞中,P的變?cè)淖冊(cè)?r1rm)(s1xs2xsm)(m個(gè)聯(lián)接個(gè)聯(lián)接)當(dāng)目的當(dāng)目的rj(或者多目的或者多目的r1rj)與某一對(duì)象與某一對(duì)象捆綁,使捆綁,使P (r1rj)為真,那么該對(duì)象被選為真,那么該對(duì)象被選中中GOMql查詢例如查詢例如(一一) 簡單項(xiàng)選擇擇謂詞例如簡單項(xiàng)選擇擇謂詞例如查詢一切工資超越查詢一切工資超越100000的的Empsrange e:Empretrieve ewhere e.salary100000.0查詢結(jié)果為查詢結(jié)果為id3,id4,id8,id9,id10 上述查詢需求輸出姓名,那么為:上述查詢需
19、求輸出姓名,那么為:range e:Emp retrieve where e.salary100000.0name“LeMond“Hinault“BossGOMql查詢例如查詢例如(二二) 問題:找出其經(jīng)理為駕駛問題:找出其經(jīng)理為駕駛Jaguar汽車的汽車的Emps 該查詢的途徑表達(dá)式為:該查詢的途徑表達(dá)式為:p=Emp.workIn.mgr.cars.make = “Jaguar 查詢表達(dá)式為:查詢表達(dá)式為:range e:Empretrieve ewhere “Jaguar in e.worksIn.mgr.cars.make 系統(tǒng)檢測(cè)范圍變量系統(tǒng)檢測(cè)范圍變量e的每個(gè)捆綁的對(duì)
20、象,經(jīng)的每個(gè)捆綁的對(duì)象,經(jīng)過途徑可以到達(dá)的串值能否為給定的過途徑可以到達(dá)的串值能否為給定的“Jaguar,假設(shè)是,那么該對(duì)象被選中,假設(shè)是,那么該對(duì)象被選中 該選擇查詢代價(jià)宏大,它需求進(jìn)展如下多該選擇查詢代價(jià)宏大,它需求進(jìn)展如下多個(gè)聯(lián)接:個(gè)聯(lián)接:Emp x Dept x Manager x Car 選擇結(jié)果為選擇結(jié)果為id1,id2,id8 更復(fù)雜的查詢更復(fù)雜的查詢(一一) 例例3:找出選擇的經(jīng)理:他的部門虧損,但仍支付:找出選擇的經(jīng)理:他的部門虧損,但仍支付給至少一個(gè)雇員工資超越二十萬元給至少一個(gè)雇員工資超越二十萬元range e:Emp,m:Managerretrieve mwhere m
21、=e.workIn.mgr ande.salary200000.0 ande.workIfit0.0 這里,這里,m=e.worksIn.mgr稱為功能聯(lián)接稱為功能聯(lián)接(對(duì)象的對(duì)象的“相相等操作子隱含地表示為等操作子隱含地表示為“標(biāo)識(shí)標(biāo)識(shí)) 例例3的優(yōu)化處置的優(yōu)化處置 假設(shè)在假設(shè)在Dept類型中添加一個(gè)關(guān)聯(lián)屬性類型中添加一個(gè)關(guān)聯(lián)屬性Emp,那么例,那么例3可以表示為:可以表示為:range d:Dept,m:Managerretrieve mwhere m=d.mgr and fit200000.0更復(fù)雜的查詢更復(fù)雜的查詢(二二) 例例4:查找這樣的經(jīng)理:他駕駛過貴重的汽車
22、,:查找這樣的經(jīng)理:他駕駛過貴重的汽車,而他管理的部門獲利很低而他管理的部門獲利很低range d:Dept,m:Manager,c:Carretrieve mwhere m=d.mgr and fit150 or c.make=“Jaguar)量詞的運(yùn)用一量詞的運(yùn)用一 (一一)全稱量詞表達(dá)式全稱量詞表達(dá)式for all rj in sj p 語義為:假設(shè)集合語義為:假設(shè)集合sj中一切成員中一切成員rj均滿足選擇謂詞均滿足選擇謂詞p(rj),那么表達(dá)式為真,否那么為假,那么表達(dá)式為真,否那么為假 例如:查詢其經(jīng)理只開寶馬車的雇員例如:查詢其經(jīng)理只開寶馬車的雇員 range e: Em
23、ps,c: Charretrieve ewhere forall c in e.worksIn.mgr.cars(c.make=BMW)量詞的運(yùn)用二量詞的運(yùn)用二 (二二)存在量詞表達(dá)式存在量詞表達(dá)式 EXIST rj IN sj P(rj) 語義為:假設(shè)在集合語義為:假設(shè)在集合S中至少有一個(gè)成員中至少有一個(gè)成員rj滿足滿足P(rj) ,那么表達(dá)式為真那么表達(dá)式為真,否那么為假否那么為假 例如:查詢其經(jīng)理所用額轎車中有一輛為美洲虎例如:查詢其經(jīng)理所用額轎車中有一輛為美洲虎的雇員的雇員 range e: Emps,c: Carretrieve ewhere exists c in e.worksI
24、n.mgr.cars(c.make=Jaguar)嵌套查詢嵌套查詢 在任何一個(gè)集合可以出現(xiàn)的地方,都可以在任何一個(gè)集合可以出現(xiàn)的地方,都可以運(yùn)用運(yùn)用range-retrive-where表達(dá)式,因此,表達(dá)式,因此,Gomql允許表達(dá)式嵌套允許表達(dá)式嵌套 表達(dá)式嵌套可以發(fā)生在三個(gè)子句的任何一表達(dá)式嵌套可以發(fā)生在三個(gè)子句的任何一個(gè)中,由于三個(gè)子句本身均要求一個(gè)集合個(gè)中,由于三個(gè)子句本身均要求一個(gè)集合表達(dá)式表達(dá)式 例如:查詢那些只駕駛美洲虎牌或?qū)汃R牌,例如:查詢那些只駕駛美洲虎牌或?qū)汃R牌,或馬力或馬力200的汽車經(jīng)理的汽車經(jīng)理range m: Manager , c: Carretrieve mwh
25、ere forall c in m.cars(c in (range v: Carretrieve vwhere v.horsePower200 or v.make=Jaguar or v.make=BMW)查詢表達(dá)式中聚集函數(shù)和查詢表達(dá)式中聚集函數(shù)和類型操作的運(yùn)用類型操作的運(yùn)用 關(guān)系查詢言語關(guān)系查詢言語QUEL僅提供少量的聚集函數(shù)如僅提供少量的聚集函數(shù)如count,sum,min,max,avg等等 Gomql允許類型操作作為函數(shù)運(yùn)用。其約束條件允許類型操作作為函數(shù)運(yùn)用。其約束條件為:類型操作不會(huì)改動(dòng)對(duì)象的形狀,且該當(dāng)前往為:類型操作不會(huì)改動(dòng)對(duì)象的形狀,且該當(dāng)前往一個(gè)值一個(gè)值 函數(shù)的范圍:在
26、函數(shù)的范圍:在where子句和子句和retrieve子句中都可子句中都可以運(yùn)用以運(yùn)用 由于類型操作含有子類型的承繼,因此,在執(zhí)行由于類型操作含有子類型的承繼,因此,在執(zhí)行時(shí),每個(gè)對(duì)象實(shí)例依然需求動(dòng)態(tài)捆綁相應(yīng)精化的時(shí),每個(gè)對(duì)象實(shí)例依然需求動(dòng)態(tài)捆綁相應(yīng)精化的操作操作例如例如 例如例如1:查許體積大于:查許體積大于150.0的圓柱體的圓柱體 range c: Cylinderretrieve cwhere c.volume150.0 例如例如2:查詢一切金子做的幾何體的總分量:查詢一切金子做的幾何體的總分量 range g: GeometricPrimitiveretrieve sum(g.weig
27、ht)where =Gold基于基于SQL的對(duì)象查詢言語的對(duì)象查詢言語GOMsql GOMsql是是O2SQL的一個(gè)子集,它是針對(duì)的一個(gè)子集,它是針對(duì)Gom的的ODL設(shè)設(shè)計(jì)的查詢言語計(jì)的查詢言語 GOMsql的目的是向用戶以供基于的目的是向用戶以供基于SQL的聲明和面向集合的聲明和面向集合的查詢接口的查詢接口 面向?qū)ο蟮幕诿嫦驅(qū)ο蟮幕赟QL的查詢言語強(qiáng)調(diào)的是對(duì)象類型,而對(duì)的查詢言語強(qiáng)調(diào)的是對(duì)象類型,而對(duì)象關(guān)系的象關(guān)系的SQL擴(kuò)展擴(kuò)展SQL-99強(qiáng)調(diào)的依然是關(guān)系,即強(qiáng)調(diào)的依然是關(guān)系,即如何經(jīng)過關(guān)系模型的擴(kuò)展將對(duì)象和類引入如何經(jīng)過關(guān)系模型的擴(kuò)展將對(duì)象和類引入 其他的面向?qū)ο?/p>
28、的查詢言語其他的面向?qū)ο蟮牟樵冄哉Z-OQL。它是針對(duì)。它是針對(duì)ODL設(shè)計(jì)的設(shè)計(jì)的查詢言語,而查詢言語,而ODL是是IDL(接口描畫言語接口描畫言語-CORBA的一的一個(gè)組件的擴(kuò)展。個(gè)組件的擴(kuò)展。 *CORBA是分布式面向?qū)ο蟮挠?jì)算的一種規(guī)范是分布式面向?qū)ο蟮挠?jì)算的一種規(guī)范例如數(shù)據(jù)庫邊境標(biāo)識(shí)的幾何體數(shù)據(jù)庫type BRep with extension isbodyname: string; weight: float; faces: FaceSet;end type BRep;type FaceSet is bodyFaceend type FaceSet;type EdgeSet isbod
29、yEdgeend type EdgeSet;查找援用鏈type Face is bodysurface: float; edegs: EdgeSet;end type Face;type VertexSet is body Vertexend type VertexSet;type Edge is body length: float; vertices: VertexSet;end type Edge;type Vertex is bodyx,y,z: float;end type Vertex;GOMsql的根本查詢構(gòu)造的根本查詢構(gòu)造 GOMsql的根本構(gòu)造為:的根本構(gòu)造為:select-
30、from-where-記記為為SFW表達(dá)式表達(dá)式 例如例如 selectb.weightfrom binBR = “cubo#5 在在Select子句中,可以引入類型操作函數(shù)子句中,可以引入類型操作函數(shù) 在在from子句中,給出了一個(gè)顯式定義的范圍變量子句中,給出了一個(gè)顯式定義的范圍變量b,b屬于屬于BRep類型的對(duì)象實(shí)例集類型的對(duì)象實(shí)例集 在在where子句中,子句中,b的名字要等于的名字要等于cubo#5與與GOMsql等價(jià)的等價(jià)的SQL查詢表達(dá)式查詢表達(dá)式(1)selectweightfrom BRepwherename = “cubo#5(2)selectb.
31、weightfrom BR = “cubo#5范圍變量在范圍變量在SQL中被稱為別名中被稱為別名aliases方式方式1沒有顯式的范圍變量沒有顯式的范圍變量方式方式2經(jīng)過別名,定義了一個(gè)顯式的范圍變量經(jīng)過別名,定義了一個(gè)顯式的范圍變量bGOMsql與與SQL的主要區(qū)別的主要區(qū)別 SQL:From子句中范圍變量必需約束到一個(gè)已存子句中范圍變量必需約束到一個(gè)已存在的,旦已被命名的元組賦值的對(duì)象集合上,即在的,旦已被命名的元組賦值的對(duì)象集合上,即捆綁到一個(gè)關(guān)系或一個(gè)已建立的捆綁到一個(gè)關(guān)系或一個(gè)已建立的 視圖上視圖上 結(jié)論:結(jié)論:SQL的的From子句中不允許嵌套子句中
32、不允許嵌套SFW的構(gòu)的構(gòu)造造 GOMsql:From子句中的范圍變量可以定義在任子句中的范圍變量可以定義在任何的對(duì)象集合上。即無論是耐久的命名集合,還何的對(duì)象集合上。即無論是耐久的命名集合,還是一個(gè)暫時(shí)建立的對(duì)象集合,即允許捆綁到另一是一個(gè)暫時(shí)建立的對(duì)象集合,即允許捆綁到另一個(gè)個(gè)SFW表達(dá)式上。表達(dá)式上。 結(jié)論:結(jié)論:GOMsql的的From子句支持子句支持SFW構(gòu)造的嵌套構(gòu)造的嵌套 范圍變量在范圍變量在From子句中必需顯式闡明子句中必需顯式闡明范圍變量的方式化定義范圍變量的方式化定義 GOMsql中,范圍變量被捆綁到中,范圍變量被捆綁到From子句子句中的對(duì)象集合上中的對(duì)象集合上 方式化描
33、畫為:方式化描畫為: :fromin, in :=()|嵌套查詢表達(dá)式嵌套查詢表達(dá)式 例如:查找分量大于例如:查找分量大于1000的幾何體中外表積大于的幾何體中外表積大于10的外表集合。的外表集合。 方法:先查找分量大于方法:先查找分量大于1000的幾何體,再從中挑的幾何體,再從中挑出外表積大于出外表積大于10的子集的子集 Select fForm f in(select b.facesfrom b in Brepwhere b.weight1000)where f.surface10 這里,外層范圍變量這里,外層范圍變量f被限定在內(nèi)部的被限定在內(nèi)部的SFW表表達(dá)式所前往的達(dá)式所前往的Face
34、對(duì)象集合上。對(duì)象集合上。 需求留意的約束條件是:保證范圍變量必需有需求留意的約束條件是:保證范圍變量必需有一個(gè)獨(dú)一的類型,這個(gè)類型可以在編譯時(shí)推導(dǎo)一個(gè)獨(dú)一的類型,這個(gè)類型可以在編譯時(shí)推導(dǎo)出來出來 一個(gè)嵌套查詢表達(dá)了查詢的途徑表達(dá)式是一個(gè)嵌套查詢表達(dá)了查詢的途徑表達(dá)式是faces 更廣泛地,一個(gè)范圍變量不僅被限定在經(jīng)過途更廣泛地,一個(gè)范圍變量不僅被限定在經(jīng)過途徑表達(dá)式檢索的對(duì)象集合上,而且可以捆綁在徑表達(dá)式檢索的對(duì)象集合上,而且可以捆綁在任何一個(gè)集合上。任何一個(gè)集合上。BrepFace例如例如2 查詢分量在查詢分量在1001000之間的幾何體之間的幾何體 笨方法:先找出分量大于笨方法:先找出分量
35、大于100的幾何體,再從的幾何體,再從中挑出小于中挑出小于1000的來的來 select form b2 in(select b1from b1 in Brepwhere b1.weight100)where b2.weight1000 優(yōu)化的結(jié)果優(yōu)化的結(jié)果 select form b in Brepwhere b.weight100范圍變量可以限定到范圍變量可以限定到實(shí)例集合的屬性域上實(shí)例集合的屬性域上例如:查詢立方體例如:查詢立方體cubo#5的的8個(gè)頂點(diǎn)坐標(biāo)。個(gè)頂點(diǎn)坐標(biāo)。select v.x, v.y, v.zfrom v in( select e.vertic
36、es from e in( select f.edges from f in( select b.faces from b in BRep where =cubo#5 ) ) ) 從最內(nèi)層的從最內(nèi)層的SFW開場(chǎng)開場(chǎng)7-9句:句:b被限定在被限定在BRep的類型擴(kuò)展上的類型擴(kuò)展上 謂詞謂詞=Cubo#5將將b限定到滿足謂詞的限定到滿足謂詞的BRep的一個(gè)子集上,前往每個(gè)幾何體的的一個(gè)子集上,前往每個(gè)幾何體的6個(gè)面?zhèn)€面f1-f6。 56行的行的SFW接受由內(nèi)層前往的接受由內(nèi)層前往的6個(gè)面,并計(jì)個(gè)面,并計(jì)算它們的邊的并集:算它們的邊的并集: 產(chǎn)生產(chǎn)生12個(gè)不同的個(gè)不同的edg
37、e對(duì)對(duì)象象 語句語句34產(chǎn)生產(chǎn)生24個(gè)點(diǎn)的并集為個(gè)點(diǎn)的并集為8個(gè)不同的個(gè)不同的點(diǎn)點(diǎn) 語句語句12產(chǎn)生產(chǎn)生8個(gè)點(diǎn)個(gè)點(diǎn)x.y.z值值,61.f ffedgesf嵌套查詢和途徑表達(dá)式嵌套查詢和途徑表達(dá)式 如下籠統(tǒng)的類型方式如下籠統(tǒng)的類型方式 type T0 is type Tn-1 istype Tn is body body body ; ; A1: T1; An: Tn; ; ; end type Tn end type T0end type Tn-1 即元組類型即元組類型Ti經(jīng)過它的屬性經(jīng)過它的屬性Ai1產(chǎn)生對(duì)類型產(chǎn)生對(duì)類型Ti的援用的援用 一個(gè)嵌套查詢的一個(gè)嵌套查詢的SFW表達(dá)式表達(dá)式 假設(shè)
38、從援用鏈的始端假設(shè)從援用鏈的始端T0開場(chǎng),到開場(chǎng),到Tn終止,查終止,查詢一個(gè)原子類型詢一個(gè)原子類型SomeAttr的值,那么它的查的值,那么它的查詢?nèi)缦拢涸內(nèi)缦拢?select an.someAttrfrom an in( select an-1.Anfrom an-1 in( select a1.A2 from a1 in( select s.A1 from s in someSet ) ) 利用途徑表達(dá)式,其查詢可以縮短為:利用途徑表達(dá)式,其查詢可以縮短為: select an.someAttrfrom an in someSet.A1.A2.An嵌套查詢的數(shù)學(xué)表示嵌套查詢的數(shù)學(xué)表示 數(shù)
39、學(xué)上的表示:結(jié)果集合可以表示為并數(shù)學(xué)上的表示:結(jié)果集合可以表示為并集集Un,其中,其中Ui被遞歸定義成:被遞歸定義成:11.1:iiUain)ifor(1 Aia0)if(i someSetiu不同的不同的Join類型類型 不同類型的聯(lián)絡(luò)不同類型的聯(lián)絡(luò) 基于值的基于值的Join:關(guān)系查詢傳統(tǒng)的:關(guān)系查詢傳統(tǒng)的Join操作操作 標(biāo)識(shí)標(biāo)識(shí)Join 函數(shù)函數(shù)Join基于值的基于值的Join 傳統(tǒng)的銜接操作,經(jīng)過給定的傳統(tǒng)的銜接操作,經(jīng)過給定的Join屬性的值的比屬性的值的比較來聯(lián)絡(luò)對(duì)象較來聯(lián)絡(luò)對(duì)象 例如:查詢兩個(gè)例如:查詢兩個(gè)BRep對(duì)象,它們之間,第二個(gè)對(duì)象,它們之間,第二個(gè)變量為第一個(gè)的兩倍變量
40、為第一個(gè)的兩倍 select , from b1 in BRep, b2 in BRep where b1.weight * 2.0 = b2.weight+ 對(duì)象對(duì)象b1,b2之間經(jīng)過變量值來關(guān)聯(lián)之間經(jīng)過變量值來關(guān)聯(lián)標(biāo)識(shí)標(biāo)識(shí)Join-同一同一Jion 標(biāo)識(shí)標(biāo)識(shí)Join-基于對(duì)象的相等,而不是值相等,基于對(duì)象的相等,而不是值相等,因此,是基于因此,是基于OID值相等的銜接值相等的銜接 例如例如. 謂詞謂詞O1O2-表示表示O1與與O2OID相等而不是相等而不是O1與與O2的形狀相等的形狀相等 謂詞謂詞O-當(dāng)且僅當(dāng)當(dāng)且僅當(dāng)O是是Object集集合中的一個(gè)對(duì)象實(shí)例時(shí)為真,而不是說合中的一個(gè)對(duì)象實(shí)例時(shí)為真,而不是說Object中有一個(gè)對(duì)象形狀與中有一個(gè)對(duì)象形狀與O的形狀相等的形狀相等標(biāo)識(shí)標(biāo)識(shí)Join例如例如
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- QC/T 686-2024摩托車和輕便摩托車發(fā)動(dòng)機(jī)組合式曲軸連桿總成
- 2025-2030年中國智能公交行業(yè)商業(yè)模式創(chuàng)新戰(zhàn)略制定與實(shí)施研究報(bào)告
- 新形勢(shì)下餐飲食材配送行業(yè)可持續(xù)發(fā)展戰(zhàn)略制定與實(shí)施研究報(bào)告
- 2025-2030年中國有色金屬礦產(chǎn)采選行業(yè)開拓第二增長曲線戰(zhàn)略制定與實(shí)施研究報(bào)告
- 高層領(lǐng)導(dǎo)戰(zhàn)略管理培訓(xùn)課件
- 四川省綿陽市2024屆高三下學(xué)期第三次診斷性考試(三模)英語試題
- 中國錄音復(fù)制行業(yè)競爭格局分析及投資戰(zhàn)略咨詢報(bào)告
- 一年級(jí)數(shù)學(xué)(上)計(jì)算題專項(xiàng)練習(xí)匯編
- 實(shí)驗(yàn)小學(xué)學(xué)年第一學(xué)期班主任參考計(jì)劃二年級(jí)3班
- 疫情防控視角下的社區(qū)多元主體協(xié)同治理研究
- 2024年危險(xiǎn)化學(xué)品生產(chǎn)經(jīng)營單位其他從業(yè)人員考試題庫附答案
- 信號(hào)分析與處理課程設(shè)計(jì)課程教學(xué)大綱基本要求及規(guī)范(集中實(shí)踐環(huán)節(jié))
- 2024年中考物理真題及分類匯編-考點(diǎn)25:磁現(xiàn)象-電生磁
- 2024年更新版:精準(zhǔn)農(nóng)業(yè)無人機(jī)植保服務(wù)合同
- 2024年度中國醫(yī)院人力資源現(xiàn)狀調(diào)研報(bào)告
- 【MOOC】有機(jī)化學(xué)-華中農(nóng)業(yè)大學(xué) 中國大學(xué)慕課MOOC答案
- 二水石膏轉(zhuǎn)化為半水石膏的研究
- 中醫(yī)特色治療進(jìn)修匯報(bào)
- 闌尾炎內(nèi)鏡治療
- 《2025年日歷》電子版模板年歷月歷工作學(xué)習(xí)計(jì)劃橫版整年帶農(nóng)歷
- 2023-2024學(xué)年廣東省廣州市白云區(qū)九年級(jí)(上)期末語文試卷
評(píng)論
0/150
提交評(píng)論