第十三章 面向?qū)ο髷?shù)據(jù)庫系統(tǒng)_第1頁
第十三章 面向?qū)ο髷?shù)據(jù)庫系統(tǒng)_第2頁
第十三章 面向?qū)ο髷?shù)據(jù)庫系統(tǒng)_第3頁
第十三章 面向?qū)ο髷?shù)據(jù)庫系統(tǒng)_第4頁
第十三章 面向?qū)ο髷?shù)據(jù)庫系統(tǒng)_第5頁
已閱讀5頁,還剩54頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第十三章面向?qū)ο髷?shù)據(jù)庫系統(tǒng)本章主要內(nèi)容及重點:面向?qū)ο髷?shù)據(jù)庫系統(tǒng)的基本概念。第十三章面向?qū)ο髷?shù)據(jù)庫系統(tǒng)13.1面向?qū)ο蟪绦蛟O(shè)計方法13.2面向?qū)ο髷?shù)據(jù)模型13.3面向?qū)ο髷?shù)據(jù)庫建模13.4對象-關(guān)系數(shù)據(jù)庫第十三章面向?qū)ο髷?shù)據(jù)庫系統(tǒng)13.1面向?qū)ο蟪绦蛟O(shè)計方法

13.1面向?qū)ο蟪绦蛟O(shè)計方法第十三章面向?qū)ο髷?shù)據(jù)庫系統(tǒng)面向?qū)ο蟮臄?shù)據(jù)庫系統(tǒng)(ObjectOrientedDatabaseSystem,簡稱OODBS)是數(shù)據(jù)庫技術(shù)與面向?qū)ο蟪绦蛟O(shè)計方法相結(jié)合而產(chǎn)生的數(shù)據(jù)庫系統(tǒng)。三條線路展開:1.以關(guān)系數(shù)據(jù)庫和SQL為基礎(chǔ)的擴展關(guān)系模型。Informix、DB2、Oracle、Sybase等。2.以面向?qū)ο蟮某绦蛟O(shè)計語言為基礎(chǔ),研究持久的程序設(shè)計語言,支持OO模型。3.建立新的面向?qū)ο髷?shù)據(jù)庫系統(tǒng),支持OO模型。一、面向?qū)ο蟮某绦蛟O(shè)計方法二、對象和類的概念三、結(jié)構(gòu)化程序設(shè)計和面向?qū)ο蟮某绦蛟O(shè)計13.1面向?qū)ο蟪绦蛟O(shè)計方法第十三章面向?qū)ο髷?shù)據(jù)庫系統(tǒng)一、面向?qū)ο蟮某绦蛟O(shè)計方法

是一種支持模塊化設(shè)計和軟件重用的實際可行的編程方法。它把程序設(shè)計的主要活動集中在建立對象和對象之間的聯(lián)系(或通信)上,從而完成所需要的計算。一個面向?qū)ο蟮某绦蚓褪窍嗷ヂ?lián)系(或通信)的對象集合。13.1面向?qū)ο蟪绦蛟O(shè)計方法第十三章面向?qū)ο髷?shù)據(jù)庫系統(tǒng)對象1對象2對象3對象4基本思想是封裝和可擴展性。二、對象和類的概念

1.對象客觀世界中任何一個事物都可以看成一個對象。對象是以對象名封裝的數(shù)據(jù)結(jié)構(gòu)和可施加在這些數(shù)據(jù)上的私有操作。如:學(xué)校、一個班級、軍隊中的一個團、一個連都是對象。

(1)作為對象,它應(yīng)該至少有兩個要素:①從事活動的主體:如班級中的學(xué)生②活動的內(nèi)容:如上課、開會等。

13.1面向?qū)ο蟪绦蛟O(shè)計方法第十三章面向?qū)ο髷?shù)據(jù)庫系統(tǒng)

(2)從計算機角度看,一個對象應(yīng)包括兩個要素:

①數(shù)據(jù):相當于班級中的學(xué)生。數(shù)據(jù)結(jié)構(gòu)描述了對象的狀態(tài)。②需要進行的操作:相當于學(xué)生進行的活動。對象的操作就是對象的行為。如:定義一個學(xué)生對象,其狀態(tài)由:“學(xué)號、姓名、性別、專業(yè)號、年齡”等屬性組成,其行為由:“顯示學(xué)生信息、增加一個學(xué)生、刪除一個學(xué)生”等操作組成。13.1面向?qū)ο蟪绦蛟O(shè)計方法第十三章面向?qū)ο髷?shù)據(jù)庫系統(tǒng)對象數(shù)據(jù)操作代碼

從計算機角度看,對象就是一個包含數(shù)據(jù)以及與這些數(shù)據(jù)有關(guān)的操作的集合。13.1面向?qū)ο蟪绦蛟O(shè)計方法第十三章面向?qū)ο髷?shù)據(jù)庫系統(tǒng)

2.類①描述有一些對象是具有相同的結(jié)構(gòu)和特性的。類代表了某一批對象的共性和特征。每個對象都屬于一個類型。

對象的類型就是類。②類和對象

類是對象的抽象,而對象是類的具體實例。三、結(jié)構(gòu)化程序設(shè)計和面向?qū)ο蟮某绦蛟O(shè)計1.傳統(tǒng)的面向過程的程序設(shè)計是圍繞功能進行的,用一個函數(shù)實現(xiàn)一個功能。所有的數(shù)據(jù)都是公用的,一個函數(shù)可以使用任意一組數(shù)據(jù),而一組數(shù)據(jù)又能被多個函數(shù)所使用。

程序設(shè)計者必須考慮每一個細節(jié),什么時候?qū)κ裁磾?shù)據(jù)進行操作。當程序規(guī)模較大,數(shù)據(jù)很多,操作繁多時,程序設(shè)計者往往感到難以應(yīng)付。

2.面向?qū)ο蟪绦蛟O(shè)計方法的一個重要特點就是“封裝性”,把數(shù)據(jù)和操作代碼封裝在一個對象中。面向?qū)ο蟪绦蛟O(shè)計面對的是一個個對象。所有的數(shù)據(jù)分別屬于不同的對象把相關(guān)的數(shù)據(jù)和操作放在一起,形成一個整體,與外界相對獨立。

實際上,每一組數(shù)據(jù)都是有特定用途的,是某種操作的對象。

13.1面向?qū)ο蟪绦蛟O(shè)計方法第十三章面向?qū)ο髷?shù)據(jù)庫系統(tǒng)3.面向?qū)ο蟪绦蛟O(shè)計的可擴展性體現(xiàn)在繼承性和行為擴展兩方面。繼承性是因為對象有層次關(guān)系,父對象有子對象,子對象繼承父對象的數(shù)據(jù)結(jié)構(gòu)和操作。實際上是一種重用。行為擴展是指增加對象的行為。

程序設(shè)計者的任務(wù)包括兩個方面:(1)設(shè)計對象,即決定把那些數(shù)據(jù)和操作代碼封裝在一起;(2)在此基礎(chǔ)上怎樣通知有關(guān)對象完成所需的任務(wù)。13.1面向?qū)ο蟪绦蛟O(shè)計方法第十三章面向?qū)ο髷?shù)據(jù)庫系統(tǒng)一、面向?qū)ο髷?shù)據(jù)庫模型二、OO模型的核心概念13.2面向?qū)ο髷?shù)據(jù)模型第十三章面向?qū)ο髷?shù)據(jù)庫系統(tǒng)一、面向?qū)ο髷?shù)據(jù)庫模型

面向?qū)ο髷?shù)據(jù)模型(ObjectOrientedDataModel,簡稱OO模型)是用面向?qū)ο笥^點來描述現(xiàn)實世界實體(對象)的邏輯組織、對象間限制、聯(lián)系等的模型。是一種可擴充的數(shù)據(jù)模型,在該數(shù)據(jù)模型中,數(shù)據(jù)模型是可擴充的,即用戶可根據(jù)需要,自己定義新的數(shù)據(jù)類型及相應(yīng)的約束和操作。

面向?qū)ο髷?shù)據(jù)庫系統(tǒng)是一個持久的、可共享的對象庫的存儲和管理者;而一個對象庫是由一個OO模型所定義的對象的集合體。13.2面向?qū)ο髷?shù)據(jù)模型第十三章面向?qū)ο髷?shù)據(jù)庫系統(tǒng)二、OO模型的核概念

一系列面向?qū)ο蠛诵母拍顦?gòu)成了OO模型的基礎(chǔ)。1.對象與對象標識OID(1)對象結(jié)構(gòu)屬性集合每一個對象都有各自的狀態(tài)、組成和特性,稱為對象的屬性。屬性可能是一個簡單的值,也可能是其他對象,即對象的嵌套,并且這種嵌套可以繼續(xù)下去,從而組成各種復(fù)雜的對象。

所有屬性合起來構(gòu)成了對象數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu)。13.2面向?qū)ο髷?shù)據(jù)模型第十三章面向?qū)ο髷?shù)據(jù)庫系統(tǒng)方法集合方法是對象的行為特性。方法可改變對象的狀態(tài),對對象進行各種操作。方法的定義包含兩個部分:

一是方法的接口,又稱調(diào)用說明,說明方法的名稱、參數(shù)和結(jié)果類型;

二是方法的實現(xiàn)部分,它是用程序設(shè)計語言編寫的一個過程,以實現(xiàn)方法的功能。13.2面向?qū)ο髷?shù)據(jù)模型第十三章面向?qū)ο髷?shù)據(jù)庫系統(tǒng)消息集合對象是封裝的,即每一個對象是其狀態(tài)和行為的封裝。消息是對象間通信的手段。一個對象通過向另一個對象發(fā)送消息來請求服務(wù)。

方法是在數(shù)據(jù)定義的過程中定義的。為了真正執(zhí)行一個方法中的步驟,用戶必須向?qū)ο蟀l(fā)送消息。消息傳送給對象,調(diào)用對象的相應(yīng)方法,進行相應(yīng)的操作,最后,以消息形式返回操作的結(jié)果。一條消息是一個執(zhí)行方法的請求。包括:接收對象名調(diào)用的操作適當?shù)膮?shù)13.2面向?qū)ο髷?shù)據(jù)模型第十三章面向?qū)ο髷?shù)據(jù)庫系統(tǒng)(2)對象標識面向?qū)ο髷?shù)據(jù)庫中的每個對象都有一個唯一的不變的標識,稱為對象標識(OID)。

OID是獨立于屬性值的,系統(tǒng)全局唯一的。一個對象的OID不會隨著它的屬性值的改變而改變。

常用的幾種標識:值標識(關(guān)系數(shù)據(jù)庫中的元組)名標識(程序變量)內(nèi)標識(面向?qū)ο髷?shù)據(jù)庫)

標識的幾種持久性:程序內(nèi)持久性:變量名程序間持久性:關(guān)系名永久持久性:對象標識13.2面向?qū)ο髷?shù)據(jù)模型第十三章面向?qū)ο髷?shù)據(jù)庫系統(tǒng)(3)封裝封裝是對象的外部界面與內(nèi)部實現(xiàn)之間實行清晰隔離的一種抽象,外部與對象的通信只能通過消息,這是OO模型的主要特征之一。封裝提高了數(shù)據(jù)的獨立性,程序的可靠性。也帶來了查詢的不便,失去了關(guān)系數(shù)據(jù)庫的重要優(yōu)點。13.2面向?qū)ο髷?shù)據(jù)模型第十三章面向?qū)ο髷?shù)據(jù)庫系統(tǒng)2.類、類的層次和類的繼承(1)類的概念具有相似特性的對象集合為類,是型的概念。類中的每個對象稱為類的一個實例,是值的概念。一個類中的所有對象其特性必須相同,即具有相同的屬性、響應(yīng)相同的消息、使用相同的方法。類的概念相當于關(guān)系模型中的關(guān)系模式,類的一個實例對象類似關(guān)系中的一個元組,類的實例之間和類之間可以有復(fù)雜的聯(lián)系。面向?qū)ο髷?shù)據(jù)庫模式是類的集合。13.2面向?qū)ο髷?shù)據(jù)模型第十三章面向?qū)ο髷?shù)據(jù)庫系統(tǒng)(2)類層次

超類:一個類的父類。

類層次:一個超類的子類還可以定義子類,一組類形成一個有限的層次結(jié)構(gòu)。一組類可以形成一個類層次,一個面向?qū)ο髷?shù)據(jù)庫模式可能有多個類層次。在一個類層次中,一個類繼承其所有超類的全部屬性。13.2面向?qū)ο髷?shù)據(jù)模型第十三章面向?qū)ο髷?shù)據(jù)庫系統(tǒng)超類/子類體現(xiàn)了“ISA”語義。(3)繼承單繼承:一個子類只能繼承一個超類的特性(屬性、方法和消息)。多繼承:若一個子類能繼承多個超類的特性。

13.2面向?qū)ο髷?shù)據(jù)模型第十三章面向?qū)ο髷?shù)據(jù)庫系統(tǒng)兩個優(yōu)點:①建模的有力工具,提供了對現(xiàn)實世界簡明而精確的描述。②提供了信息重用機制。避免重復(fù)定義。(4)對象的嵌套對象的層次結(jié)構(gòu):對象的某一個屬性可以是單值或值的集合。即一個對象的屬性可以是一個對象。形成對象間的嵌套層次結(jié)構(gòu)。對象嵌套概念是面向?qū)ο髷?shù)據(jù)庫系統(tǒng)中又一個重要概念,它允許用戶采用不同的粒度來觀察對象。13.2面向?qū)ο髷?shù)據(jù)模型第十三章面向?qū)ο髷?shù)據(jù)庫系統(tǒng)一、面向?qū)ο髷?shù)據(jù)庫語言二、面向?qū)ο髷?shù)據(jù)庫建模13.3面向?qū)ο髷?shù)據(jù)庫建模第十三章面向?qū)ο髷?shù)據(jù)庫系統(tǒng)一、面向?qū)ο髷?shù)據(jù)庫語言(OODB語言)

13.3面向?qū)ο髷?shù)據(jù)庫建模第十三章面向?qū)ο髷?shù)據(jù)庫系統(tǒng)

OODB語言用于描述面向?qū)ο髷?shù)據(jù)庫模式,說明并操縱類定義與對象實例。(1)類的定義與操縱(ODL)

包括定義、生成、存取、修改與撤銷類。其中類的定義包括定義類的屬性、操作特征、繼承性與約束等。(2)操作/方法的定義在操作實現(xiàn)中,語言的命令可用于操作對象的局部數(shù)據(jù)結(jié)構(gòu)。對象模型中的封裝性允許操作/方法由不同程序設(shè)計語言來實現(xiàn),并且隱藏不同程序設(shè)計語言實現(xiàn)的事實。(3)對象的操縱(OML)

可以用于操縱(即生成、存取、修改與刪除)實例對象。二、面向?qū)ο髷?shù)據(jù)庫建模

面向?qū)ο髷?shù)據(jù)庫的模型描述工具ODL((ObjectDefinitionLanguage:對象定義語言),它是CORBA(正在制定的分布式面向?qū)ο笥嬎愕臉藴剩┑囊粋€組件。ODL是從設(shè)計者的角度觀察數(shù)據(jù)的結(jié)構(gòu),與具體的DBMS無關(guān)。所以,ODL和E-R圖一樣,是建立數(shù)據(jù)庫概念模型的工具,它們都可以向DBMS支持的數(shù)據(jù)模型轉(zhuǎn)化,如圖所示。13.3面向?qū)ο髷?shù)據(jù)庫建模第十三章面向?qū)ο髷?shù)據(jù)庫系統(tǒng)13.3面向?qū)ο髷?shù)據(jù)庫建模第十三章面向?qū)ο髷?shù)據(jù)庫系統(tǒng)1.ODL的類說明在對象的定義中主要包括以下幾個部分:①關(guān)鍵字Interface(接口);②類的名字;③類的特性表,可以是屬性、聯(lián)系、方法。ODL類說明的最簡單形式是:

Interface<類名字>{<特性表>};2.ODL中屬性的說明屬性是類的一種最簡單的特性。例:利用ODL描述職工(employee)類,語句如下:

interfaceemployee{

attributestringname;

attributeintegerage;

attributeenumsextype{male,female}sex;};13.3面向?qū)ο髷?shù)據(jù)庫建模第十三章面向?qū)ο髷?shù)據(jù)庫系統(tǒng)說明:第一行說明employee是一個類;第二行說明屬性name,其類型是string,即長度未知的字符串;第三行說明屬性age,類型是整型;第四行說明屬性sex,其類型是枚舉型,枚舉類型名字為sextype,sex的值從male或female中選擇。這是employee類的說明,任何一個employee對象在這幾個屬性上均對應(yīng)一個分量。13.3面向?qū)ο髷?shù)據(jù)庫建模第十三章面向?qū)ο髷?shù)據(jù)庫系統(tǒng)3.ODL中的聯(lián)系為了得到對象與同類或不同類的其他對象的連接方式,需要在類的定義中說明類與類之間的聯(lián)系。如職工類與部門類之間有聯(lián)系。一個職工對象總與某個部門對象有關(guān)系(工作關(guān)系)。在employee類說明中,可用下面的ODL語句表示這種聯(lián)系:

Relationshipdepartmentworkin;

該語句說明在employee類中的每個對象,都有一個對department對象的引用,引用名為workin。13.3面向?qū)ο髷?shù)據(jù)庫建模第十三章面向?qū)ο髷?shù)據(jù)庫系統(tǒng)4.ODL中的類的繼承假設(shè)類D是類C的子類,那么在定義類D時,可以在后加上“:C”,說明類D是類C的子類,并可繼承類C的所有特性。例:定義類manager(部門經(jīng)理)為employee的子類。

interfacemanager:

employee{Relationshipdepartmentlead};

語句說明:第一行說明類manager是類employee的子類;第二行表明所有的manager對象都有一個聯(lián)系lead,表示該經(jīng)理所管理的部門,并且一位經(jīng)理只能管理一個部門。

13.3面向?qū)ο髷?shù)據(jù)庫建模第十三章面向?qū)ο髷?shù)據(jù)庫系統(tǒng)在多重繼承時,特性名之間可能會發(fā)生沖突。如兩個或多個超類可能有同名的屬性或聯(lián)系,而這些特性的類型可能不同。在ODL中提供以下幾種機制來建立解決多重繼承產(chǎn)生的沖突:指出超類特性的多個定義中哪一個用于子類;在子類中,對于有相同名字的另一個特性給一個新的名字;在子類中重新定義一個或多個超類中已定義的某些特性。13.3面向?qū)ο髷?shù)據(jù)庫建模第十三章面向?qū)ο髷?shù)據(jù)庫系統(tǒng)5.ODL中方法的說明類的另一個特性是方法,方法是與類相關(guān)的函數(shù)。類中的每一個對象都能引用方法,同一方法可用于多個類,這是面向?qū)ο笳Z言的特點。方法說明中主要有方法名、方法的輸入/輸出類型說明等。而方法的實際代碼是用宿主語言寫的,代碼本身不是ODL的一部分。13.3面向?qū)ο髷?shù)據(jù)庫建模第十三章面向?qū)ο髷?shù)據(jù)庫系統(tǒng)6.E-R模型向面向?qū)ο髷?shù)據(jù)模型的轉(zhuǎn)換當建立了現(xiàn)實世界的E-R模型以后,可將其轉(zhuǎn)換為OO模型。轉(zhuǎn)換時,可按照以下的步驟進行:(1)將E-R模型中的每個實體集生成一個類,實體集的屬性轉(zhuǎn)換為類的屬性。(2)將E-R模型中具有ISA聯(lián)系的實體集生成的類之間建立類/子類關(guān)系。(3)在轉(zhuǎn)換得到的類中加入聯(lián)系的說明:①對原E-R模型中有一對一聯(lián)系的實體集,在其生成的類中,都加入聯(lián)系說明,說明其和另一個類中的一個對象有關(guān)。13.3面向?qū)ο髷?shù)據(jù)庫建模第十三章面向?qū)ο髷?shù)據(jù)庫系統(tǒng)②對原E-R模型中有一對多聯(lián)系的實體集,在一方生成的類中,加入聯(lián)系說明,說明其和另一個類中的對象集合有關(guān);在多方生成的類中,加入聯(lián)系說明,說明其和另一個類中的一個對象有關(guān)。③對原E-R模型中有多對多聯(lián)系的實體集,在其生成的類中,都加入聯(lián)系說明,說明其和另一個類中的對象集合有關(guān)。13.3面向?qū)ο髷?shù)據(jù)庫建模第十三章面向?qū)ο髷?shù)據(jù)庫系統(tǒng)1990年,以MichaelStonebraker為首的高級DBMS功能委員會發(fā)表了“第三代數(shù)據(jù)庫系統(tǒng)宣言”的文章,提出一個面向?qū)ο髷?shù)據(jù)庫系統(tǒng)必須具有兩個條件:一是支持一核心的面向?qū)ο髷?shù)據(jù)模型;二是支持傳統(tǒng)數(shù)據(jù)庫系統(tǒng)所有的數(shù)據(jù)庫特性。雖然面向?qū)ο髷?shù)據(jù)庫系統(tǒng)在一些特定應(yīng)用領(lǐng)域(例如CAD等)較好地滿足了其應(yīng)用需要,但是,這種純粹的面向?qū)ο髷?shù)據(jù)庫系統(tǒng)并不支持SQL,在通用性方面失去了優(yōu)勢,其應(yīng)用領(lǐng)域受到很大的局限性。13.4對象-關(guān)系據(jù)庫第十三章面向?qū)ο髷?shù)據(jù)庫系統(tǒng)而同時,面向?qū)ο蠹夹g(shù)和數(shù)據(jù)庫技術(shù)相結(jié)合的另一個產(chǎn)物————對象―關(guān)系數(shù)據(jù)庫管理系統(tǒng)(ORDBMS)卻得到了快速的發(fā)展。

ORDBMS是將傳統(tǒng)的關(guān)系數(shù)據(jù)庫加以擴展,增加面向?qū)ο筇匦?既支持已被廣泛使用的SQL,具有良好的通用型,又具有面向?qū)ο筇匦?支持復(fù)雜對象和復(fù)雜對象的復(fù)雜行為,適應(yīng)了新應(yīng)用領(lǐng)域的需要和傳統(tǒng)應(yīng)用領(lǐng)域發(fā)展的需要。正在制定中的國際標準SQL3也體現(xiàn)了ORDBM特性。13.4對象-關(guān)系據(jù)庫第十三章面向?qū)ο髷?shù)據(jù)庫系統(tǒng)

ORDBMS在SQL環(huán)境中主要增加了以下四個特征:·對基本類型擴充的支持;·對復(fù)雜對象的支持;·對繼承性的支持;·對產(chǎn)生式規(guī)則系統(tǒng)的支持。13.4對象-關(guān)系據(jù)庫第十三章面向?qū)ο髷?shù)據(jù)庫系統(tǒng)一、基本數(shù)據(jù)類型的擴充目前的RDBMS中只支持固定的數(shù)據(jù)類型集、操作符和少量的函數(shù)。而ORDBMS中具有可擴充的數(shù)據(jù)類型、函數(shù)和操作符。

Illustra把一組數(shù)據(jù)類型及其上的有關(guān)函數(shù)和操作符、訪問方法進行封裝,稱為DataBlade(數(shù)據(jù)刀片)模塊。13.4對象-關(guān)系據(jù)庫第十三章面向?qū)ο髷?shù)據(jù)庫系統(tǒng)1.創(chuàng)建基本數(shù)據(jù)類型創(chuàng)建一個新的數(shù)據(jù)類型需要指明類型名、類型的存儲信息和該數(shù)據(jù)類型同ASCII來回轉(zhuǎn)換的子程序。例如:CreateTypeMytype(

Internallength=8,Input=MytypeInput,

Output=MytypeOutput);13.4對象-關(guān)系據(jù)庫第十三章面向?qū)ο髷?shù)據(jù)庫系統(tǒng)該SQL語句創(chuàng)建了用戶自定義的數(shù)據(jù)類型Mytype,其中Internallength指明存儲該類的實例時將分配到的字節(jié)數(shù),兩個函數(shù)MytypeInput和MytypeOutput分別是在該數(shù)據(jù)類型的實例同ASCII之間轉(zhuǎn)換時調(diào)用的輸入、輸出例程,該例程可以用于加密、解密運算等,也可以什么都不做。另外,創(chuàng)建數(shù)據(jù)類型時還可以包含約束,方便數(shù)據(jù)的完整性檢查并拒絕不合適的數(shù)據(jù)輸入。13.4對象-關(guān)系據(jù)庫第十三章面向?qū)ο髷?shù)據(jù)庫系統(tǒng)2.用戶自定義函數(shù)

ORDBMS中既可以用SQL也可以用第三代編程語言(例如C等)編寫函數(shù),然后把函數(shù)注冊到系統(tǒng)中以供調(diào)用。函數(shù)定義中必須指明函數(shù)名、參數(shù)、返回值類型以及函數(shù)的執(zhí)行代碼,命令格式為:

CreateFunction函數(shù)名(類型1,類型2,…)

Returns類型AS(文件名或SQL語句表達式);13.4對象-關(guān)系據(jù)庫第十三章面向?qū)ο髷?shù)據(jù)庫系統(tǒng)例如:在職工表Employee中,假設(shè)有工資字段Salary,可定義一個函數(shù),用來計算每個職工的工資與平均工資的差別:

CreateFunctionDiff-salary(float)

Returnsfloatas

Select$1―AVG(salary)

Fromemployee;

然后就可以在數(shù)據(jù)的操作中自由運用函數(shù)Diff-salary了。13.4對象-關(guān)系據(jù)庫第十三章面向?qū)ο髷?shù)據(jù)庫系統(tǒng)例如:查詢所有職工的姓名及其與平均工資的差別,可表示成:

Selectname,Diff-salary(Salary)Fromemployee;自定義函數(shù)也可以是C語言程序,在此不作介紹。13.4對象-關(guān)系據(jù)庫第十三章面向?qū)ο髷?shù)據(jù)庫系統(tǒng)3.用戶自定義操作符在Illustra系統(tǒng)中,用CreateOperator命令來登記操作符,形式如下:

CreateOperator

Binding操作符名

To函數(shù)名;說明中允許用戶用任何符號作為操作符,并把它賦給一個指定的函數(shù)。13.4對象-關(guān)系據(jù)庫第十三章面向?qū)ο髷?shù)據(jù)庫系統(tǒng)二、支持復(fù)雜對象復(fù)雜對象是由多種基本的或用戶定義的類型構(gòu)成的對象。在ORDBMS中創(chuàng)建復(fù)雜對象的構(gòu)件有:組合、集合、引用、數(shù)組、列表、堆棧等,其中最基本的是前面三種。1.使用組合構(gòu)造對象構(gòu)造一個組合類型,需要指明該類型的名字、每一個組成成分的名字和類型。組合類型的成分也可以是另一個組合類型,即組合類型可以嵌套使用。13.4對象-關(guān)系據(jù)庫第十三章面向?qū)ο髷?shù)據(jù)庫系統(tǒng)定義一組合photo-t,由國家號(country-num)、區(qū)號(area-num)和電話號碼(tele-num)組成:

CreateTypephoto-t(country-numvarchar(4),area-numvarchar(4),tele-numvarchar(8));13.4對象-關(guān)系據(jù)庫第十三章面向?qū)ο髷?shù)據(jù)庫系統(tǒng)組合類型創(chuàng)建好后,就可以在創(chuàng)建表時使用:

CreateTableemployee(

Namevarchar(10),Ageinteger,

Salaryfloat,

Photophoto-t);`

為了對組合進行操作,ORDBMS對標準SQL進行了擴充,提供多種方法使用組合或組合對象的屬性。如路徑表達式的使用:組合名.屬性名。13.4對象-關(guān)系據(jù)庫第十三章面向?qū)ο髷?shù)據(jù)庫系統(tǒng)例如:查詢職工(如胡一民)的電話號碼:

Selectphoto.tele-numFromemployeeWherename="胡一民";13.4對象-關(guān)系據(jù)庫第十三章面向?qū)ο髷?shù)據(jù)庫系統(tǒng)2.使用集合構(gòu)造對象在ORDBMS中任何一種數(shù)據(jù)類型值的集合也是一種數(shù)據(jù)類型,表示成:

Setof(T)

其中T可以是基本數(shù)據(jù)類型,也可以是組合數(shù)據(jù)類型。例如:查詢所有杭州地區(qū)職工的電話號碼:

Selectname,photo.tele-num

FromemployeeWhere′0571′inphoto.area-num;photo.area-num是一個集合,如果集合中有0571,則Where條件為真。13.4對象-關(guān)系據(jù)庫第十三章面向?qū)ο髷?shù)據(jù)庫系統(tǒng)3.使用引用構(gòu)造對象在ORDBMS中任何一種數(shù)據(jù)類型值的引用也是一種數(shù)據(jù)類型,表示成:

Ref(T)

其中T可以是集合或組合數(shù)據(jù)類型。引用可以作為任何表的任何列的數(shù)據(jù)類型。13.4對象-關(guān)系據(jù)庫第十三章面向?qū)ο髷?shù)據(jù)庫系統(tǒng)三、支持繼承

ORDBMS的第三個特性是支持子類對超類的各種特性的繼承,包括數(shù)據(jù)繼承和函數(shù)繼承,單繼承和多重繼承。首先考慮類型的繼承,假如在前面圖所示的數(shù)據(jù)庫中,有如下關(guān)于人的類型定義:

CreateTypePerson(

identifyinteger,namevarchar(10),

sexchar(2));13.4對象-關(guān)系據(jù)庫第十三章面向?qū)ο髷?shù)據(jù)庫系統(tǒng)在數(shù)據(jù)庫中需要對學(xué)生和教師分別存儲一些信息。由于學(xué)生和教師同樣是人,因而可以使用繼承來定義學(xué)生和教師類型如下:

CreateTypeStuednt(

degreevarchar(10),

departmentvarchar(20))underPerson;CreateTypeTeacher(

salaryinteger,

departmentvarchar(20))underPerson;13.4對象-關(guān)系據(jù)庫第十三章面向?qū)ο髷?shù)據(jù)庫系統(tǒng)

Student和Teacher都繼承了Person的屬性,即identify和name。Student和Teacher稱為Person的子類,Person既是Student的超類,也是Teacher的超類。假定要存儲關(guān)于在職研究生的信息,這些研究生既是教師又是學(xué)生,甚至可能是不同的系。如果類型系統(tǒng)支持多重繼承,可以為在職研究生定義類型如下:

CreateTypeTeachStudentunderStudent,Teacher;TeachStudent應(yīng)該繼承Student和Teacher的所有屬性,但這引起了另一個問題:屬性identify、name和department同時存在于Student和Teacher表中。13.4對象-關(guān)系據(jù)庫第十三章面向?qū)ο髷?shù)據(jù)庫系統(tǒng)屬性identify和name都是從類Person中繼承來的,因此同時從Student和Teacher中繼承這兩個屬性不會引起沖突。但Student和Teacher中都有department定義,由于一個在職研究生可能是一個系的研究生,同時是另一個系的教師,為避免方式?jīng)_突,可以使用as子句將它重新命名,下面是重新命名后的TeachStudent類型:

CreateTypeTeachStudent

溫馨提示

  • 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)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論