北京郵電大學(xué)軟件工程研究生的課程-數(shù)據(jù)庫設(shè)計(jì)開發(fā)-0-4_第1頁
北京郵電大學(xué)軟件工程研究生的課程-數(shù)據(jù)庫設(shè)計(jì)開發(fā)-0-4_第2頁
北京郵電大學(xué)軟件工程研究生的課程-數(shù)據(jù)庫設(shè)計(jì)開發(fā)-0-4_第3頁
北京郵電大學(xué)軟件工程研究生的課程-數(shù)據(jù)庫設(shè)計(jì)開發(fā)-0-4_第4頁
北京郵電大學(xué)軟件工程研究生的課程-數(shù)據(jù)庫設(shè)計(jì)開發(fā)-0-4_第5頁
已閱讀5頁,還剩34頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1.4對(duì)象關(guān)系數(shù)據(jù)庫傳統(tǒng)關(guān)系型僅支持簡單數(shù)據(jù)類型;不支持?jǐn)?shù)組、嵌套和遞歸的數(shù)據(jù)結(jié)構(gòu),給新型數(shù)據(jù)模型-面向?qū)ο蟮臄?shù)據(jù)模型提供了應(yīng)用背景。面向?qū)ο蟮某绦蛟O(shè)計(jì)思想和技術(shù)促進(jìn)了面向?qū)ο蟮臄?shù)據(jù)模型的實(shí)現(xiàn)和應(yīng)用-OODBS(面向?qū)ο髷?shù)據(jù)庫)。習(xí)慣于‘填表’方式的客戶不太愿意接受對(duì)象模型,而且面向?qū)ο髷?shù)據(jù)庫系統(tǒng)與編程語言集成度高,沒有統(tǒng)一可行標(biāo)準(zhǔn);OODBS只占很小的市場分額。以關(guān)系數(shù)據(jù)庫和SQL為基礎(chǔ)擴(kuò)展關(guān)系模型-對(duì)象關(guān)系數(shù)據(jù)庫(ORDBMS)的發(fā)展?jié)M足了許多應(yīng)用需求。郭文明2003.06.051.4對(duì)象關(guān)系數(shù)據(jù)庫ORACLE、DB2UDB、INFORMIX都推出ORBMS,ANSI/ISO發(fā)布的SQL-99標(biāo)準(zhǔn)是一個(gè)對(duì)象關(guān)系標(biāo)準(zhǔn)。1.4.1面向?qū)ο髷?shù)據(jù)模型對(duì)象與標(biāo)識(shí)類和類層次繼承和嵌套面向?qū)ο髷?shù)據(jù)庫1.4.2ORACLE對(duì)象關(guān)系庫ORACLE中對(duì)象類型ORACLE中匯集類型PL/SQL過程、用戶定義函數(shù)和方法1.4.3對(duì)象關(guān)系數(shù)據(jù)庫對(duì)象聯(lián)系ORDB數(shù)據(jù)定義ORDB數(shù)據(jù)查詢

三種產(chǎn)品的對(duì)象關(guān)系特征郭文明2003.06.051.4.1

面向?qū)ο髷?shù)據(jù)模型面向?qū)ο髷?shù)據(jù)庫系統(tǒng)(ObjectOrientedDatabaseSystem,OODBS)是數(shù)據(jù)庫技術(shù)與面向?qū)ο蟪绦蛟O(shè)計(jì)方法相結(jié)合的產(chǎn)物;面向?qū)ο蟪绦蛟O(shè)計(jì)方法的主要活動(dòng)在建立對(duì)象和對(duì)象之間的聯(lián)系;面向?qū)ο髷?shù)據(jù)庫系統(tǒng)一般依賴于一個(gè)面向?qū)ο蟮某绦蛟O(shè)計(jì)語言.一個(gè)面向?qū)ο髷?shù)據(jù)庫系統(tǒng)是一個(gè)持久的、可共享的對(duì)象庫的存儲(chǔ)和管理者;而一個(gè)對(duì)象庫是由一個(gè)OO模型所定義的對(duì)象的集合體。面向?qū)ο髷?shù)據(jù)模型是用面向?qū)ο笥^點(diǎn)來描述現(xiàn)實(shí)世界實(shí)體的邏輯組織、對(duì)象間限制、聯(lián)系.面向?qū)ο蟪绦蛟O(shè)計(jì)語言中建立的對(duì)象自動(dòng)保存在磁盤上即OODBS面向?qū)ο髷?shù)據(jù)庫的用戶主要是應(yīng)用軟件系統(tǒng)軟件開發(fā)專業(yè)程序員郭文明2003.06.051.4.1

面向?qū)ο髷?shù)據(jù)模型面向?qū)ο髷?shù)據(jù)模型的主要觀點(diǎn):

對(duì)象:對(duì)象是基本的數(shù)據(jù)結(jié)構(gòu),現(xiàn)實(shí)世界的任一實(shí)體都被統(tǒng)一模型化為一個(gè)對(duì)象,每個(gè)對(duì)象有一個(gè)永久標(biāo)識(shí);對(duì)象可以被指定為一個(gè)給定類型,還可以定義為其它對(duì)象的子類型;

封裝:每一個(gè)對(duì)象是其狀態(tài)與行為的封裝。封裝的狀態(tài)為屬性,行為為方法。對(duì)象與外部通信一般只能通過顯式的消息傳遞。

繼承:子類型繼承父類型的所有特性和行為.面向?qū)ο蟮暮诵挠^點(diǎn)構(gòu)成OO模型的基礎(chǔ),沒有像關(guān)系模型那樣的規(guī)范說明。如果與面向?qū)ο髷?shù)據(jù)庫相比,RDBMS可以稱為面向表的數(shù)據(jù)庫。郭文明2003.06.05對(duì)象與標(biāo)識(shí)對(duì)象是由一組數(shù)據(jù)結(jié)構(gòu)和在這組數(shù)據(jù)結(jié)構(gòu)上的操作的程序代碼封裝起來的基本單位,包括:屬性、方法和消息。面向?qū)ο蟮臄?shù)據(jù)庫系統(tǒng)在邏輯上和物理上從面向記錄上升為面向?qū)ο蟆⒚嫦蚩删哂袕?fù)雜結(jié)構(gòu)的一個(gè)邏輯整體。面向?qū)ο髷?shù)據(jù)庫中的每一個(gè)對(duì)象都有一個(gè)唯一的不變的標(biāo)識(shí)(OID)。創(chuàng)建對(duì)象時(shí)系統(tǒng)就給它賦予一個(gè)OID,直到它被刪除。外部與對(duì)象的通信只能通過消息,隔離了對(duì)象的實(shí)現(xiàn)與對(duì)象的應(yīng)用,提高數(shù)據(jù)獨(dú)立性。查詢屬性值通過調(diào)用方法,不象關(guān)系系統(tǒng)那樣使用SQL,不夠方便靈活。ORDBMS中不支持封裝,可即席查詢郭文明2003.06.05類和類層次相似對(duì)象的集合稱為類,每個(gè)對(duì)象稱為它所在類的一個(gè)實(shí)例,一個(gè)類中的所有對(duì)象共享一個(gè)定義,它們的區(qū)別僅在與屬性的取值不同.類本身也可以看作一個(gè)對(duì)象(類對(duì)象).面向?qū)ο髷?shù)據(jù)模型提供類層次結(jié)構(gòu),一個(gè)面向?qū)ο髷?shù)據(jù)庫模式可能有多個(gè)類層次(超類和子類),在一個(gè)類層次中,一個(gè)類繼承其所有(直接和間接的)超類的全部屬性、方法和消息.超類是子類的抽象,子類是超類的特殊化.對(duì)相似對(duì)象的重復(fù)定義十分浪費(fèi),將相似對(duì)象分組形成一個(gè)“類”不同類的對(duì)象可以共享他們公共部分的結(jié)構(gòu)和特性郭文明2003.06.05類和類層次類層次可以動(dòng)態(tài)擴(kuò)展,一個(gè)新的子類能從一個(gè)或多個(gè)已有類導(dǎo)出。面向?qū)ο髷?shù)據(jù)庫中,類是“型”,對(duì)象是某一類的一個(gè)“值”.類屬性的定義域可以是任何類(基本類或包含屬性和方法的一般類)。面向?qū)ο髷?shù)據(jù)庫模式是類的集合,類可能有多個(gè)類層次。例如:一個(gè)學(xué)校應(yīng)用的面向?qū)ο髷?shù)據(jù)庫,其中有教職員工和學(xué)生兩個(gè)類,這兩類都有身份證號(hào)、姓名、性別、住址等屬性,也有相同的方法和消息。統(tǒng)一定義教職員工和學(xué)生的公共屬性、方法和消息部分,稱為一個(gè)類“人”;分別定義各自的特殊屬性、方法和消息部分,分別稱為教職員工類和學(xué)生類,教職員工類和學(xué)生類定義為人的子類。郭文明2003.06.05

繼承和嵌套子類繼承超類的特性,避免許多重復(fù)定義.這種繼承性有兩優(yōu)點(diǎn):是建模的有力工具;提供信息重用機(jī)制.封裝和繼承導(dǎo)出多態(tài)性.子類可以定義自己特殊的屬性、方法和消息,在定義這些特殊的屬性、方法和消息時(shí)可能與超類或多個(gè)超類之間發(fā)生沖突.這種沖突由系統(tǒng)解決,不同系統(tǒng)使用不同的沖突解決方法.一個(gè)對(duì)象屬性可以是另一個(gè)對(duì)象稱為對(duì)象的嵌套.這樣一來,不僅類之間具有層次結(jié)構(gòu),而且某一個(gè)類內(nèi)部也具有嵌套層次結(jié)構(gòu),形成對(duì)象橫向和縱向的復(fù)雜結(jié)構(gòu).不像RDBMS中的平面結(jié)構(gòu)郭文明2003.06.05

面向?qū)ο髷?shù)據(jù)庫在OODB中,與對(duì)象模型密切相關(guān)的是面向?qū)ο髷?shù)據(jù)庫語言。OODB語言主要包括對(duì)象定義語言(ODL)和對(duì)象操縱語言(OML),對(duì)象操縱語言一個(gè)重要子集是對(duì)象查詢語言(OQL)。OODB語言一般應(yīng)具備類的定義與操縱、操作/方法的定義、對(duì)象的操縱功能。面向?qū)ο髷?shù)據(jù)庫語言的研制是OODB系統(tǒng)開發(fā)中的重要部分,人們?cè)噲D擴(kuò)充面向?qū)ο蟪绦蛟O(shè)計(jì)語言O(shè)OPL的查詢語言或者擴(kuò)充SQL的功能,目前還沒有像SQL那樣的關(guān)于面向?qū)ο髷?shù)據(jù)庫語言的標(biāo)準(zhǔn)。不同的OODBMS其具體的數(shù)據(jù)庫語言各不相同。RDBMS中有數(shù)據(jù)定義DDL、數(shù)據(jù)操縱DML、數(shù)據(jù)控制DCL郭文明2003.06.051.4.2

ORACLE對(duì)象關(guān)系庫(對(duì)象關(guān)系模型)對(duì)象關(guān)系模型支持用戶類型定義(ORACLE稱對(duì)象類型;INFORMIX稱行類型;DB2UDB稱用戶定義類型).一個(gè)表是包含用戶定義類型的多個(gè)行.對(duì)象關(guān)系模型允許一個(gè)行包括一個(gè)行值匯集(如數(shù)組或單個(gè)列自身是一個(gè)表).面向?qū)ο髷?shù)據(jù)庫中,只能通過對(duì)象的方法操縱對(duì)象,在對(duì)象關(guān)系模型中,所有對(duì)象被看作是公共的而并非私有的,通過SQL即可操縱對(duì)象,當(dāng)然也可使用用戶定義的函數(shù).顯然,對(duì)象關(guān)系模型違反第一泛式規(guī)則顯然,對(duì)象關(guān)系模型沒有面向?qū)ο髷?shù)據(jù)模型和關(guān)系模型那樣嚴(yán)格郭文明2003.06.051.4.2ORACLE對(duì)象關(guān)系庫(一個(gè)例子)職工號(hào)姓名職務(wù)家屬關(guān)系姓名0001張家口職員妻子李小玫兒子張冠李0002柴米油經(jīng)理妻子陸續(xù)琴0003郝成功職員妻子朱那亞兒子郝乃軍女兒郝佳欣家屬屬性有內(nèi)部數(shù)據(jù)結(jié)構(gòu),對(duì)象類型每個(gè)行中包含多個(gè)值,匯集類型郭文明2003.06.05

ORACLE中對(duì)象類型一個(gè)對(duì)象類型有多個(gè)類型屬性,ORACLE中對(duì)象類型由Createtype語句創(chuàng)建.例:createtypenamesex_tasobject(namechar(8),sexchar(2));/createtableemployees(eidchar(4),enamenamesex_t,jobchar(6));insertintoemployeesvalue(‘0001’,namesex_t(‘趙子龍’,’男’),’經(jīng)理’);selecte.eid,,e.ename.sexfromemployeesewheree.job=‘業(yè)務(wù)員’;SQL*plus中創(chuàng)建對(duì)象必須有/前面‘表名.’不能省略typename(屬性值)稱為對(duì)象構(gòu)造器郭文明2003.06.05

ORACLE中對(duì)象類型創(chuàng)建對(duì)象的一般格式:

CREATETYPEtypenameASOBJECT(屬性名類型[,屬性名類型…]);

(informix中用createrowtyperowname(),行類型)若ORACLE中表的行包含對(duì)象類型,則稱為對(duì)象表(informix中稱類型表).采用如下形式定義表:

CREATETABLEtablenameOFtypename[([屬性名NOTNULL][,屬性名NOTNULL…][,PRIMARYKEY(屬性名[,屬性名…])])];DROPTYPEtypename[FORCE];

DROPTABLEtablename;可以是其他用戶已經(jīng)定義的類型,由此形成對(duì)象的嵌套和依賴typename對(duì)象中屬性即成為表中屬性郭文明2003.06.05

ORACLE中對(duì)象類型例:createtypeemployee_tasobject(eidchar(4),enamenamesex_t,jobchar(6));createtableemployeesofemployee_t(primarykey(eid));

對(duì)象表(包含行對(duì)象employee_t和列對(duì)象ename)無名頂層列employees頂層屬性eidenameJobename屬性ename.nameename.sex行10001趙子龍男經(jīng)理行20002張翌德男職員行30003孟可飛女職員郭文明2003.06.05

ORACLE中對(duì)象類型可用嵌套的點(diǎn)號(hào)訪問一個(gè)對(duì)象的屬性,無名頂層列可以用VALUE()形式引用行對(duì)象.

select*fromemployeesewheree.job=‘經(jīng)理’;

selectvalue(e)fromemployeesewheree.job=‘經(jīng)理’;

selecte.eid,e.jobfromemployeesewheree.ename=namesex_t(‘孟可飛’,’女’);eidename(name,sex)job0001namesex_t(‘趙子龍’,’男’)經(jīng)理value(e)(eidename(name,sex)job)employee_t(0001namesex_t(‘趙子龍’,’男’)經(jīng)理)行對(duì)象列對(duì)象對(duì)象構(gòu)造器郭文明2003.06.05

ORACLE中對(duì)象類型INSERT和UPDATE同樣可以使用對(duì)象構(gòu)造器.

insertintoemployeesvalues(‘0004’,namesex_t(‘胡作為’,’男’),null);

updateemployeesesete=employee_t(‘0004’,namesex_t(‘胡有為’,’男’),‘職員’)whereeid=‘0004’;ORACLE為每個(gè)行對(duì)象提供一個(gè)唯一標(biāo)識(shí)(對(duì)象標(biāo)識(shí)符).一個(gè)表的列可被定義為REF(引用)的內(nèi)部數(shù)據(jù)類型,允許它‘指向’一個(gè)對(duì)象表的行對(duì)象.對(duì)象的REF與對(duì)象自身具有不同類型.郭文明2003.06.05

ORACLE中對(duì)象類型createtypec_tasobject(…);createtypea_tasobject(…);createtypep_tasobject(…);createtypeo_tasobject(ordnoint,monthchar(2),cidchar(3),aidchar(3),pidchar(3),qtyint,dollarsdoubleprecision,ocrefc_t,oarefa_t,oprefp_t);createtablecofc_t(primarykey(cid));createtableaofa_t(primarykey(aid));createtablepofp_t(primarykey(pid));createtableoofo_t(primarykey(ordno),scopefor(oc)isc,scopefor(oa)isa,scopefor(od)isp);想著外碼,理解REF例:郭文明2003.06.05

ORACLE中對(duì)象類型一般通過REF訪問比通過連接訪問的效率高.超過200元的訂單號(hào)和顧客名:selectx.ordno,amefromoxwherex.dollars>200;獲得引用(REF)對(duì)象值的函數(shù)REF().沒有通過代理商a05訂貨的顧客名:selectamefromcxwherenotexists(select*fromoywherey.oc=ref(x)andy.aid=‘a(chǎn)05’);

通過北京的所有代理商訂貨的顧客cid:selectx.cidfromcxwherenotexists(select*fromaywherey.city=‘北京’andnotexists(select*fromozwherez.oc=ref(x)andz.oa=ref(y)));不存在北京代理沒有和該顧客訂貨郭文明2003.06.05

ORACLE中對(duì)象類型一個(gè)對(duì)象類型不能嵌套包含與自己類型相同的成分(遞歸),但可以包含對(duì)同樣類型的引用.建一個(gè)配偶對(duì)象表:createtypemate_tasobject(midchar(4),mnamenamesex_t,partnerrefmate_t);createtablematesofmate_t(primarykey(mid),scopefor(partner)ismates);檢索其配偶為女性的人名:selectfrommatesmwherem.partner.mname.sex=‘女’;一個(gè)表集合可以具有一個(gè)用ref表示的復(fù)雜關(guān)系集.如雇員有部門,部門有經(jīng)理,經(jīng)理又是雇員.回路的依賴中刪除時(shí)用DROPTYPE…FORCE.

郭文明2003.06.05ORACLE匯集類型ORACLE有兩種匯集類型:表類型和數(shù)組類型.匯集類型是數(shù)據(jù)庫成熟的數(shù)據(jù)類型,經(jīng)過適當(dāng)?shù)霓D(zhuǎn)換,可以在查詢中解釋為表.表類型和嵌套表創(chuàng)建:

CREATETYPEtypenameASTABLEOFobj_name;

CREATETABLEtablename(屬性名類型[NOTNULL][…])[NESTEDTABLE屬性名STOREAStablename][,NESTEDTABLE屬性名STOREAStablename…];已建的對(duì)象表類型名表類型的屬性父表子表郭文明2003.06.05ORACLE匯集類型例:createtypedepe_tastableofnamesex_t;createtableemployees(eidchar(4),enamenamesex_t,dependentsdepe_t,primarykey(eid))nestedtabledependentsstoreasd_tab;eidenameDependents0001namesex_t(‘張家口’,‘男’)namesex_t(‘李小玫’,‘女’)namesex_t(‘張冠李’,‘男’)0002namesex_t(‘柴米油’,‘男’)namesex_t(‘陸續(xù)琴’,‘女’)0003namesex_t(‘郝成功’,‘男’)namesex_t(‘朱那亞’,‘女’)namesex_t(‘郝乃軍’,‘男’)namesex_t(‘郝佳欣’,‘女’)郭文明2003.06.05ORACLE匯集類型子表的數(shù)據(jù)只能通過父表來訪問.檢索0001號(hào)職工的家屬:

selectdependentsfromemployeeswhereeid=‘0001’;檢索有2個(gè)家屬以上的職工eid:selecteidfromemployeesewhere2<(selectcount(*)fromtable(e.dependents));檢索0003號(hào)職工的家屬數(shù)目:錯(cuò)誤:selectcount(*)from(selecte.dependentsfromemployeesewheree.eid=‘0003’);錯(cuò)誤:selectcount(*)from(selecttable(e.dependents)fromemployeesewheree.eid=‘0003’);正確:selectcount(*)fromtable(selecte.dependentsfromemployeesewheree.eid=‘0003’);對(duì)象列必須加限定非對(duì)象列不加Table()將e.dependents轉(zhuǎn)換為一表郭文明2003.06.05ORACLE匯集類型利用表的乘積可以消除表的嵌套.

顯示職工號(hào)和其家屬名:selecte.eid,fromemployeese,table(e.dependents)d;

selecte.eid,fromemployeese,table(e.dependents)(+)d;顯示具有最大家屬名的職工號(hào)和其家屬名:

selecte.eid,fromemployeese,table(e.dependents)d1where=(selectmax()fromtable(e.dependents)d2);(+)表示外連,沒有家屬的eid也顯示沒有家屬的eid不顯示郭文明2003.06.05ORACLE匯集類型ORACLE的另一種匯集類型即數(shù)組類型,以VARRAY聲明.

createtypephone_tasvarray(4)ofint;createtableemployees(eidchar(4),enamenamesex_t,telephonephone_t,primarykey(eid));eidenametelephone0001namesex_t(‘張家口’,‘男’)phone_t(12345678,23456789)0002namesex_t(‘柴米油’,‘男’)phone_t(34567890)0003namesex_t(‘郝成功’,‘男’)phone_t(45678901,56789012,67890123)郭文明2003.06.05ORACLE匯集類型SQL語句不能訪問數(shù)組的下標(biāo).在嵌入主語言后,從一行檢索的數(shù)組可付給編程語言的數(shù)組.TABLE()可以應(yīng)用于VARRAY.例:列出電話號(hào)碼為45678901的人:selecteid,enamefromemployeesewhere45678901in(select*fromtable(e.telephone));匯集類型(表類型和數(shù)組)的更新用匯集構(gòu)造器.Insertintoemployeesvalues(‘0006’,namesex_t(‘孫子兵’,‘男’),phone_t(68888888,96666666));Updateemployeessettelephone=phone_t(80166666,80166667)whereeid=‘0001’;匯集構(gòu)造器郭文明2003.06.05PL/SQL、用戶定義函數(shù)和方法非過程的SQL不具備計(jì)算的完整性。ORACLE引入PL/SQL,INFORMIX引入SPL,SQLSERVER引入T-SQL.過程SQL支持內(nèi)存駐留變量、條件和循環(huán)結(jié)構(gòu)、過程和函數(shù)等。一個(gè)用過程SQL編寫的函數(shù)在服務(wù)器上執(zhí)行時(shí)被稱為存儲(chǔ)過程,由CreateFunction語句記錄在服務(wù)器上的數(shù)據(jù)庫目錄表中。觸發(fā)器是可以在任意事件發(fā)生時(shí)執(zhí)行的過程性SQL語句塊。觸發(fā)器用于實(shí)現(xiàn)定制的約束或缺省行為。用戶定義函數(shù)(UDF)是用過程性SQL(或C、Java)寫的函數(shù),可以像交互式SQL中的內(nèi)部函數(shù)一樣被調(diào)用。方法是與用戶定義類型一起定義的用戶定義函數(shù)。郭文明2003.06.05PL/SQL、用戶定義函數(shù)和方法例:對(duì)象關(guān)系數(shù)據(jù)庫中利用對(duì)象類型定義表、利用用戶定義函數(shù)定義對(duì)象的方法。1)定義對(duì)象點(diǎn)(point_t)和矩形(rectangle_t)及其方法inside(point_t)(點(diǎn)是否在矩形對(duì)象內(nèi))和area()(矩形面積).定義點(diǎn)對(duì)象createtypepoint_tasobject(xint,yint);定義包含方法的矩形對(duì)象createtyperectangle_tasobject(pt1point_t,pt2point_t,memberfunctioninside(ppoint_t)returnint,memberfunctionareareturnint);成員函數(shù),實(shí)際是對(duì)象的方法郭文明2003.06.05PL/SQL、用戶定義函數(shù)和方法createtypebodyrectangle_tasmemberfunctionareareturnintisbegin--成員函數(shù)area定義return(self.pt2.x-self.pt1.x)*(self.pt2.y-self.pt1.y);end;--成員函數(shù)area沒有參數(shù),返回長乘寬.memberfunctioninside(pinpoint_t)returnintisbeginif(p.x>=self.pt1.x)and(p.x<=self.pt2.x)and(p.y>=self.pt1.y)and(p.y<=self.pt2.y)thenreturn1;elsereturn0;endif;end;--成員函數(shù)inside參數(shù)為點(diǎn)類型的p,當(dāng)p在矩形中時(shí)返回1,否則返回0.end;郭文明2003.06.05PL/SQL、用戶定義函數(shù)和方法2)創(chuàng)建point_t和rectangle_t類型的對(duì)象表.createtablepointsofpoint_t(primarykey(x,y));createtablerectsofrectangle_t(primarykey(pt1.x,pt1.y,pt2.x,pt2.y));插入兩個(gè)矩形:insertintorectsvalues(point_t(1,2),point_t(3,4));insertintorectsvalues(point_t(1,1),point_t(6,6));插入三個(gè)點(diǎn):insertintopointsvalues(2,3);insertintopointsvalues(1,4);insertintopointsvalues(4,4);郭文明2003.06.05PL/SQL、用戶定義函數(shù)和方法3)使用方法area和inside.

計(jì)算rects表中矩形面積:selectvalue(x),x.area()fromrectsx;

判斷點(diǎn)(4,2)是否在每個(gè)矩形中:selectvalue(x),x.inside(point_t(4,2))fromrectsx;查詢?cè)谒芯匦蝺?nèi)的所有點(diǎn):selectvalue(p)frompointspwherenotexists(select*fromrectsrwherer.inside(p)=0);計(jì)算覆蓋各點(diǎn)的最小矩形的面積:selectp.x,p.y,min(r.area())fromrectsr,pointspwherer.inside(value(p))>0groupbyp.x,p.y;將面積小于24的矩形的pt2橫縱坐標(biāo)加1:updaterectsrsetpt2=point_t(r.pt2.x+1,r.pt2.y+1)wherer.area()<24;郭文明2003.06.05PL/SQL、用戶定義函數(shù)和方法定義包含方法的對(duì)象

CREATETYPEtypenameASOBJECT(attrnamedatatype[,attrnamedatatype…]MEMBERFUNCTIONmethodname[(paramtype[,paramtype…])]RETURNdatatype,[,MEMBERFUNCTIONmethodname[(paramtype[,paramtype…])]RETURNdatatype,…]);在前面對(duì)象類型的基礎(chǔ)上增加了MEMBERFUNCTION語句,定義對(duì)象的成員函數(shù),即方法。郭文明2003.06.05PL/SQL、用戶定義函數(shù)和方法對(duì)象成員函數(shù)的定義

CREATE[ORREPLACE]TYPEBODYtypename[AS|IS]MEMBERFUNCTIONmethodname[(paramtype…)]RETURNtypeISBEGIN--PL/SQL語句開始statementsEND;--PL/SQL語句結(jié)束[MEMBERFUNCTIONmethodname[(paramtype…)]RETURNtypeisBEGIN……]END;

對(duì)于不同的DBMS,對(duì)象成員函數(shù)的處理過程使用的語句可能不同,帶來移植的通用問題。郭文明2003.06.051.4.3

對(duì)象關(guān)系數(shù)據(jù)庫對(duì)象關(guān)系數(shù)據(jù)庫系統(tǒng)除具有原來關(guān)系數(shù)據(jù)庫的各種特點(diǎn)外,還應(yīng)該提供以下特點(diǎn):1)擴(kuò)充數(shù)據(jù)類型:允許用戶根據(jù)自己應(yīng)用需求定義自己的數(shù)據(jù)類型、函數(shù)和操作符。例如可以定義數(shù)組、向量、矩陣、集合以及這些數(shù)據(jù)類型上的操作。2)支持復(fù)雜對(duì)象:復(fù)雜對(duì)象指由多種基本類型或用戶定義類型構(gòu)成的對(duì)象。3)支持繼承:支持子類、超類的概念,支持屬性數(shù)據(jù)和函數(shù)及過程的繼承。4)提供通用的規(guī)則系統(tǒng):規(guī)則在DBMS及其應(yīng)用中十分重要,傳統(tǒng)DBMS中的觸發(fā)器可以看作規(guī)則的一種形式。郭文明2003.06.05對(duì)象聯(lián)系關(guān)系模型中基本

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論