《關(guān)聯(lián)對象訪問 》ppt課件_第1頁
《關(guān)聯(lián)對象訪問 》ppt課件_第2頁
《關(guān)聯(lián)對象訪問 》ppt課件_第3頁
《關(guān)聯(lián)對象訪問 》ppt課件_第4頁
《關(guān)聯(lián)對象訪問 》ppt課件_第5頁
已閱讀5頁,還剩48頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)

文檔簡介

1、第十四章第十四章 關(guān)聯(lián)對象訪問關(guān)聯(lián)對象訪問Associative Object Access 本章重點講述本章重點講述GOM對關(guān)聯(lián)對象查詢的支持,即如對關(guān)聯(lián)對象查詢的支持,即如何實現(xiàn)一個查詢和如何描畫用戶的查詢要求何實現(xiàn)一個查詢和如何描畫用戶的查詢要求 在在O-O DBMS中,實現(xiàn)一個查詢是經(jīng)過多態(tài)的中,實現(xiàn)一個查詢是經(jīng)過多態(tài)的Select函數(shù)來實現(xiàn)的函數(shù)來實現(xiàn)的 GOM支持二種查詢言語支持二種查詢言語GOMql、GOMsql 其中其中GOMql是基于關(guān)系言語是基于關(guān)系言語QUEL在面向?qū)ο笊显诿嫦驅(qū)ο笊系臄U展的擴展 GOMsql是是SQL在面向?qū)ο笊系臄U展在面向?qū)ο笊系臄U展 關(guān)聯(lián)查詢的操作對

2、象為:類型范圍關(guān)聯(lián)查詢的操作對象為:類型范圍(Type Extention),用戶定義的集合對象和表對象,用戶定義的集合對象和表對象多態(tài)的關(guān)聯(lián)選擇操作定義及其實現(xiàn)多態(tài)的關(guān)聯(lián)選擇操作定義及其實現(xiàn) 關(guān)聯(lián)選擇操作需求一個操作對象闡明關(guān)聯(lián)選擇操作需求一個操作對象闡明在在某個對象實例集合上,需求一個條件表達某個對象實例集合上,需求一個條件表達式作為選擇的根據(jù)式作為選擇的根據(jù)選擇謂詞選擇謂詞 當(dāng)定義一個多態(tài)的選擇操作時,選擇謂詞當(dāng)定義一個多態(tài)的選擇操作時,選擇謂詞將以函數(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,是一個集合類型,其元素類型為,是一個集合類型,其元素類型為t2 Select操作有兩個變元:接受者類型為操作有兩個變元:接受者類型為t1,另一個變元是一個布爾函數(shù),它對類型為另一個變元是一個布爾函數(shù),它對類型為t2的對象進展選擇,前往一個布爾型結(jié)果

4、的對象進展選擇,前往一個布爾型結(jié)果 Select語義對語義對t1的元素用布爾函數(shù)進展挑選;的元素用布爾函數(shù)進展挑選;多態(tài)選擇操作的實現(xiàn)多態(tài)選擇操作的實現(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運用舉例運用舉例 在立方體實例庫中,查找某一個頂點是原點的立在立方體實例庫中,查找某一個頂點是原點的立方體方體 分析:其選擇謂詞需求依次檢查一個立方體的分析:其選擇謂詞需求依次檢查一個立方體的8個點,能否有一個點的個點,能否有一個點的x、y、z坐標(biāo)值為坐標(biāo)值為0,0 inOrigin 操作操作 其結(jié)果該當(dāng)是下面二個集合的交集:其結(jié)果該當(dāng)是下面二個集合的交集: 包含在立方體實例集合中的實例包含在立方體實例集合中的實例myCuboid所援用所援用 滿足謂詞滿足謂詞inOrigin 的實例的實例 多態(tài)的多態(tài)的Select操作可以運用于任何一個集合類型操作可以運用于任何

6、一個集合類型 inOrigin定義定義declare inOrigin: Cuboid | bool; define inOrigin is !判別任何一個頂點能判別任何一個頂點能否處于坐標(biāo)原點否處于坐標(biāo)原點 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無名的選擇謂詞的運用無名的選擇謂詞的運用 當(dāng)布爾選擇謂詞比較簡單,那么可以當(dāng)布爾選擇謂詞比較簡單,那么可以 符號來實符號來實現(xiàn)操作過程的傳送現(xiàn)操作過程的傳送 例如:選擇紅色蘋果的選擇操作例如:選擇紅色蘋果的選擇操作 .選擇謂詞用命名選擇謂詞用命名isRed表達表達declare i

8、sRed: Apple |bool; define isRed is .選擇謂詞用選擇謂詞用表達表達直接傳送過程直接傳送過程redApples:=myApples.select ( x: x.color = “red) GoldCuboid=mycuboid.select ( x: = “gold)帶參數(shù)的選擇謂詞帶參數(shù)的選擇謂詞 該參數(shù)是為選擇謂詞效力的,所以需求在該參數(shù)是為選擇謂詞效力的,所以需求在謂詞函數(shù)中闡明謂詞函數(shù)中闡明 由于在援用時,顯然需求由由于在援用時,顯然需求由Select來援用,來援用,因此,在因此,在Select的參數(shù)表中也要闡明,規(guī)的參數(shù)表中也要闡

9、明,規(guī)那么如下:那么如下:poly overload select (t1 bool), t3 - t1 語義:其中類型語義:其中類型t3可以是任何類型,它的可以是任何類型,它的約束條件是約束條件是Select的第三個參數(shù)類型的第三個參數(shù)類型t3,必需與選擇謂詞所需一個參數(shù)類型一致必需與選擇謂詞所需一個參數(shù)類型一致Select的重載的重載 Select函數(shù)不但是多態(tài)的,而且是重載的,函數(shù)不但是多態(tài)的,而且是重載的,它可以根據(jù)選擇謂詞的需求,設(shè)定多個參它可以根據(jù)選擇謂詞的需求,設(shè)定多個參數(shù)數(shù) 編譯器根據(jù)重載規(guī)那么,從參數(shù)的個數(shù),編譯器根據(jù)重載規(guī)那么,從參數(shù)的個數(shù),尋覓到正確的實現(xiàn)版本尋覓到正確的

10、實現(xiàn)版本 其約束條件為:在啞、實結(jié)合時,其約束條件為:在啞、實結(jié)合時,Select的參數(shù)個數(shù)和各自類型必需與選擇謂詞的的參數(shù)個數(shù)和各自類型必需與選擇謂詞的參數(shù)個數(shù)、類型完全一致參數(shù)個數(shù)、類型完全一致例如例如1一個參數(shù)的選擇謂詞一個參數(shù)的選擇謂詞 對對Cuboid定義一個選擇謂詞定義一個選擇謂詞bigCuboid,它能選擇體積大于某個閾值的立方體對象它能選擇體積大于某個閾值的立方體對象 定義定義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二個參數(shù)的選擇謂詞二個參數(shù)的選擇謂詞 選擇體積在一個范圍選擇體積在一個范圍(上限上限high,下限為,下限為low)的立方體的立方體declare volumeRange: Cuboid | float, float - bool; define volumeRange(low, high) isreturn (self.volume=low);迭代迭

12、代Iterators 可以在挑選的根底上利用循環(huán)進展各種進一步的可以在挑選的根底上利用循環(huá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ù)只是一個關(guān)聯(lián)查詢實現(xiàn)的根底,對多態(tài)選擇函數(shù)只是一個關(guān)聯(lián)查詢實現(xiàn)的根底,對于復(fù)雜的嵌套查詢及其優(yōu)化,表達力度不夠,需于復(fù)雜的嵌套查詢及其優(yōu)化,表達力度不夠,需求經(jīng)過定義相關(guān)的查詢言語來實現(xiàn)求經(jīng)過定義相關(guān)的查詢言語來實現(xiàn) 查詢優(yōu)化有兩個方面處理查詢優(yōu)化有兩個方面處理 關(guān)系代數(shù)的優(yōu)化:編譯時進展關(guān)系代數(shù)的優(yōu)化:編譯時進展 物理查詢途徑的優(yōu)化:執(zhí)行時進

14、展物理查詢途徑的優(yōu)化:執(zhí)行時進展 下面的內(nèi)容從用戶角度出發(fā),如何查詢需求正確下面的內(nèi)容從用戶角度出發(fā),如何查詢需求正確地用相應(yīng)的查詢言語序列來表達地用相應(yīng)的查詢言語序列來表達 GOMql是基于是基于QUEL的擴展的擴展一個對象實例庫一個對象實例庫 類型定義類型定義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; 途徑表達式為查找援用鏈的援用序列途徑表達式為查找援用鏈的援用序列例如:例如:Emp.worksIn.mgr.cars.make 例如的類型定義中,關(guān)聯(lián)對象的聯(lián)接,僅例如的類型定義中,關(guān)聯(lián)對象的聯(lián)接,僅僅采用一個進入點的方式僅采用一個進入點的方式worksIn-mgr-cars- - -make-Emp Dept Manager Car stringEMPworkInDeptN1DeptmgrManager11ManagercarsCarNMGOMql表達式表達式 單目的查詢表達式單目的查詢表達式rang r1:s1,rm:smret

16、rieve riwhere p(r1, rm) 多目的查詢表達式多目的查詢表達式rang r1:s1,rm:smretrieve a1:r1,aj:rjwhere p(r1, rm) Range子句:范圍闡明子句子句:范圍闡明子句其中:其中:rj1jm為范圍變量表達式,為范圍變量表達式,它用于它用于range子句中子句中其中,其中,sj1jm必需是以下情況之一必需是以下情況之一Sj是一個類型擴展是一個類型擴展EXT(用類型名表達用類型名表達)一個集合對象變量一個集合對象變量一個列表對象變量一個列表對象變量一個包含有集合構(gòu)造的對象變量一個包含有集合構(gòu)造的對象變量一個包含有表構(gòu)造的對象變量一個包含

17、有表構(gòu)造的對象變量一個計算一個集合構(gòu)造對象的表達式一個計算一個集合構(gòu)造對象的表達式一個計算一個表構(gòu)造對象的表達式一個計算一個表構(gòu)造對象的表達式總之,變量總之,變量rj被約束到一個相應(yīng)的聚集類型被約束到一個相應(yīng)的聚集類型sj的元素類型的元素類型 retrieve子句子句 查詢闡明子句查詢闡明子句 簡單方式:只需一個范圍變量簡單方式:只需一個范圍變量單目的單目的查詢查詢 復(fù)雜方式:經(jīng)過投影到多個范圍變量,構(gòu)復(fù)雜方式:經(jīng)過投影到多個范圍變量,構(gòu)造的多元組造的多元組多目的查詢多目的查詢 實現(xiàn)方法:對目的的范圍變量與相應(yīng)的對實現(xiàn)方法:對目的的范圍變量與相應(yīng)的對象分別進展捆綁,并進展選擇謂詞查詢象分別進展

18、捆綁,并進展選擇謂詞查詢 Where子句:選擇謂詞中,子句:選擇謂詞中,P的變元的變元(r1rm)(s1xs2xsm)(m個聯(lián)接個聯(lián)接)當(dāng)目的當(dāng)目的rj(或者多目的或者多目的r1rj)與某一對象與某一對象捆綁,使捆綁,使P (r1rj)為真,那么該對象被選為真,那么該對象被選中中GOMql查詢例如查詢例如(一一) 簡單項選擇擇謂詞例如簡單項選擇擇謂詞例如查詢一切工資超越查詢一切工資超越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 該查詢的途徑表達式為:該查詢的途徑表達式為:p=Emp.workIn.mgr.cars.make = “Jaguar 查詢表達式為:查詢表達式為:range e:Empretrieve ewhere “Jaguar in e.worksIn.mgr.cars.make 系統(tǒng)檢測范圍變量系統(tǒng)檢測范圍變量e的每個捆綁的對

20、象,經(jīng)的每個捆綁的對象,經(jīng)過途徑可以到達的串值能否為給定的過途徑可以到達的串值能否為給定的“Jaguar,假設(shè)是,那么該對象被選中,假設(shè)是,那么該對象被選中 該選擇查詢代價宏大,它需求進展如下多該選擇查詢代價宏大,它需求進展如下多個聯(lián)接:個聯(lián)接:Emp x Dept x Manager x Car 選擇結(jié)果為選擇結(jié)果為id1,id2,id8 更復(fù)雜的查詢更復(fù)雜的查詢(一一) 例例3:找出選擇的經(jīng)理:他的部門虧損,但仍支付:找出選擇的經(jīng)理:他的部門虧損,但仍支付給至少一個雇員工資超越二十萬元給至少一個雇員工資超越二十萬元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)接(對象的對象的“相相等操作子隱含地表示為等操作子隱含地表示為“標(biāo)識標(biāo)識) 例例3的優(yōu)化處置的優(yōu)化處置 假設(shè)在假設(shè)在Dept類型中添加一個關(guān)聯(lián)屬性類型中添加一個關(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)量詞的運用一量詞的運用一 (一一)全稱量詞表達式全稱量詞表達式for all rj in sj p 語義為:假設(shè)集合語義為:假設(shè)集合sj中一切成員中一切成員rj均滿足選擇謂詞均滿足選擇謂詞p(rj),那么表達式為真,否那么為假,那么表達式為真,否那么為假 例如:查詢其經(jīng)理只開寶馬車的雇員例如:查詢其經(jīng)理只開寶馬車的雇員 range e: Em

23、ps,c: Charretrieve ewhere forall c in e.worksIn.mgr.cars(c.make=BMW)量詞的運用二量詞的運用二 (二二)存在量詞表達式存在量詞表達式 EXIST rj IN sj P(rj) 語義為:假設(shè)在集合語義為:假設(shè)在集合S中至少有一個成員中至少有一個成員rj滿足滿足P(rj) ,那么表達式為真那么表達式為真,否那么為假否那么為假 例如:查詢其經(jīng)理所用額轎車中有一輛為美洲虎例如:查詢其經(jīng)理所用額轎車中有一輛為美洲虎的雇員的雇員 range e: Emps,c: Carretrieve ewhere exists c in e.worksI

24、n.mgr.cars(c.make=Jaguar)嵌套查詢嵌套查詢 在任何一個集合可以出現(xiàn)的地方,都可以在任何一個集合可以出現(xiàn)的地方,都可以運用運用range-retrive-where表達式,因此,表達式,因此,Gomql允許表達式嵌套允許表達式嵌套 表達式嵌套可以發(fā)生在三個子句的任何一表達式嵌套可以發(fā)生在三個子句的任何一個中,由于三個子句本身均要求一個集合個中,由于三個子句本身均要求一個集合表達式表達式 例如:查詢那些只駕駛美洲虎牌或?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)查詢表達式中聚集函數(shù)和查詢表達式中聚集函數(shù)和類型操作的運用類型操作的運用 關(guān)系查詢言語關(guān)系查詢言語QUEL僅提供少量的聚集函數(shù)如僅提供少量的聚集函數(shù)如count,sum,min,max,avg等等 Gomql允許類型操作作為函數(shù)運用。其約束條件允許類型操作作為函數(shù)運用。其約束條件為:類型操作不會改動對象的形狀,且該當(dāng)前往為:類型操作不會改動對象的形狀,且該當(dāng)前往一個值一個值 函數(shù)的范圍:在

26、函數(shù)的范圍:在where子句和子句和retrieve子句中都可子句中都可以運用以運用 由于類型操作含有子類型的承繼,因此,在執(zhí)行由于類型操作含有子類型的承繼,因此,在執(zhí)行時,每個對象實例依然需求動態(tài)捆綁相應(yī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的對象查詢言語的對象查詢言語GOMsql GOMsql是是O2SQL的一個子集,它是針對的一個子集,它是針對Gom的的ODL設(shè)設(shè)計的查詢言語計的查詢言語 GOMsql的目的是向用戶以供基于的目的是向用戶以供基于SQL的聲明和面向集合的聲明和面向集合的查詢接口的查詢接口 面向?qū)ο蟮幕诿嫦驅(qū)ο蟮幕赟QL的查詢言語強調(diào)的是對象類型,而對的查詢言語強調(diào)的是對象類型,而對象關(guān)系的象關(guān)系的SQL擴展擴展SQL-99強調(diào)的依然是關(guān)系,即強調(diào)的依然是關(guān)系,即如何經(jīng)過關(guān)系模型的擴展將對象和類引入如何經(jīng)過關(guān)系模型的擴展將對象和類引入 其他的面向?qū)ο?/p>

28、的查詢言語其他的面向?qū)ο蟮牟樵冄哉Z-OQL。它是針對。它是針對ODL設(shè)計的設(shè)計的查詢言語,而查詢言語,而ODL是是IDL(接口描畫言語接口描畫言語-CORBA的一的一個組件的擴展。個組件的擴展。 *CORBA是分布式面向?qū)ο蟮挠嬎愕囊环N規(guī)范是分布式面向?qū)ο蟮挠嬎愕囊环N規(guī)范例如數(shù)據(jù)庫邊境標(biāo)識的幾何體數(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表達式表達式 例如例如 selectb.weightfrom binBR = “cubo#5 在在Select子句中,可以引入類型操作函數(shù)子句中,可以引入類型操作函數(shù) 在在from子句中,給出了一個顯式定義的范圍變量子句中,給出了一個顯式定義的范圍變量b,b屬于屬于BRep類型的對象實例集類型的對象實例集 在在where子句中,子句中,b的名字要等于的名字要等于cubo#5與與GOMsql等價的等價的SQL查詢表達式查詢表達式(1)selectweightfrom BRepwherename = “cubo#5(2)selectb.

31、weightfrom BR = “cubo#5范圍變量在范圍變量在SQL中被稱為別名中被稱為別名aliases方式方式1沒有顯式的范圍變量沒有顯式的范圍變量方式方式2經(jīng)過別名,定義了一個顯式的范圍變量經(jīng)過別名,定義了一個顯式的范圍變量bGOMsql與與SQL的主要區(qū)別的主要區(qū)別 SQL:From子句中范圍變量必需約束到一個已存子句中范圍變量必需約束到一個已存在的,旦已被命名的元組賦值的對象集合上,即在的,旦已被命名的元組賦值的對象集合上,即捆綁到一個關(guān)系或一個已建立的捆綁到一個關(guān)系或一個已建立的 視圖上視圖上 結(jié)論:結(jié)論:SQL的的From子句中不允許嵌套子句中

32、不允許嵌套SFW的構(gòu)的構(gòu)造造 GOMsql:From子句中的范圍變量可以定義在任子句中的范圍變量可以定義在任何的對象集合上。即無論是耐久的命名集合,還何的對象集合上。即無論是耐久的命名集合,還是一個暫時建立的對象集合,即允許捆綁到另一是一個暫時建立的對象集合,即允許捆綁到另一個個SFW表達式上。表達式上。 結(jié)論:結(jié)論:GOMsql的的From子句支持子句支持SFW構(gòu)造的嵌套構(gòu)造的嵌套 范圍變量在范圍變量在From子句中必需顯式闡明子句中必需顯式闡明范圍變量的方式化定義范圍變量的方式化定義 GOMsql中,范圍變量被捆綁到中,范圍變量被捆綁到From子句子句中的對象集合上中的對象集合上 方式化描

33、畫為:方式化描畫為: :fromin, in :=()|嵌套查詢表達式嵌套查詢表達式 例如:查找分量大于例如:查找分量大于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表表達式所前往的達式所前往的Face

34、對象集合上。對象集合上。 需求留意的約束條件是:保證范圍變量必需有需求留意的約束條件是:保證范圍變量必需有一個獨一的類型,這個類型可以在編譯時推導(dǎo)一個獨一的類型,這個類型可以在編譯時推導(dǎo)出來出來 一個嵌套查詢表達了查詢的途徑表達式是一個嵌套查詢表達了查詢的途徑表達式是faces 更廣泛地,一個范圍變量不僅被限定在經(jīng)過途更廣泛地,一個范圍變量不僅被限定在經(jīng)過途徑表達式檢索的對象集合上,而且可以捆綁在徑表達式檢索的對象集合上,而且可以捆綁在任何一個集合上。任何一個集合上。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范圍變量可以限定到范圍變量可以限定到實例集合的屬性域上實例集合的屬性域上例如:查詢立方體例如:查詢立方體cubo#5的的8個頂點坐標(biāo)。個頂點坐標(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開場開場7-9句:句:b被限定在被限定在BRep的類型擴展上的類型擴展上 謂詞謂詞=Cubo#5將將b限定到滿足謂詞的限定到滿足謂詞的BRep的一個子集上,前往每個幾何體的的一個子集上,前往每個幾何體的6個面?zhèn)€面f1-f6。 56行的行的SFW接受由內(nèi)層前往的接受由內(nèi)層前往的6個面,并計個面,并計算它們的邊的并集:算它們的邊的并集: 產(chǎn)生產(chǎn)生12個不同的個不同的edg

37、e對對象象 語句語句34產(chǎn)生產(chǎn)生24個點的并集為個點的并集為8個不同的個不同的點點 語句語句12產(chǎn)生產(chǎn)生8個點個點x.y.z值值,61.f ffedgesf嵌套查詢和途徑表達式嵌套查詢和途徑表達式 如下籠統(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)生對類型產(chǎn)生對類型Ti的援用的援用 一個嵌套查詢的一個嵌套查詢的SFW表達式表達式 假設(shè)

38、從援用鏈的始端假設(shè)從援用鏈的始端T0開場,到開場,到Tn終止,查終止,查詢一個原子類型詢一個原子類型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 ) ) 利用途徑表達式,其查詢可以縮短為:利用途徑表達式,其查詢可以縮短為: 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)識標(biāo)識Join 函數(shù)函數(shù)Join基于值的基于值的Join 傳統(tǒng)的銜接操作,經(jīng)過給定的傳統(tǒng)的銜接操作,經(jīng)過給定的Join屬性的值的比屬性的值的比較來聯(lián)絡(luò)對象較來聯(lián)絡(luò)對象 例如:查詢兩個例如:查詢兩個BRep對象,它們之間,第二個對象,它們之間,第二個變量為第一個的兩倍變量

40、為第一個的兩倍 select , from b1 in BRep, b2 in BRep where b1.weight * 2.0 = b2.weight+ 對象對象b1,b2之間經(jīng)過變量值來關(guān)聯(lián)之間經(jīng)過變量值來關(guān)聯(lián)標(biāo)識標(biāo)識Join-同一同一Jion 標(biāo)識標(biāo)識Join-基于對象的相等,而不是值相等,基于對象的相等,而不是值相等,因此,是基于因此,是基于OID值相等的銜接值相等的銜接 例如例如. 謂詞謂詞O1O2-表示表示O1與與O2OID相等而不是相等而不是O1與與O2的形狀相等的形狀相等 謂詞謂詞O-當(dāng)且僅當(dāng)當(dāng)且僅當(dāng)O是是Object集集合中的一個對象實例時為真,而不是說合中的一個對象實例時為真,而不是說Object中有一個對象形狀與中有一個對象形狀與O的形狀相等的形狀相等標(biāo)識標(biāo)識Join例如例如

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論