對象關(guān)系數(shù)據(jù)庫_第1頁
對象關(guān)系數(shù)據(jù)庫_第2頁
對象關(guān)系數(shù)據(jù)庫_第3頁
對象關(guān)系數(shù)據(jù)庫_第4頁
對象關(guān)系數(shù)據(jù)庫_第5頁
已閱讀5頁,還剩26頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

對象關(guān)系數(shù)據(jù)庫張志遠、孟禹彤、仲逸凡、覃夏怡、郭晨、徐昊。GroupSeven

對象數(shù)據(jù)庫產(chǎn)生的原因1.關(guān)系數(shù)據(jù)庫在處理復(fù)雜關(guān)系的時候很笨重,往往需要很多個表來表示關(guān)系。

其主要原因是因為關(guān)系模式不能很好的描述客觀的事物,而且缺乏對復(fù)雜數(shù)據(jù)類型的支持。2抗阻失配(Impedancemismatch)3數(shù)據(jù)不能與行為相關(guān)聯(lián)。也即是這有數(shù)據(jù)不能有方法(操作)。阻抗失配(Impedancemismatch)SQL語言不是圖靈完備語言。一般來說一門語言只要有if判斷,遞歸或循環(huán)結(jié)構(gòu)以及最基本的賦值能力和四則運算就是圖靈完備的了。由于對象模型和關(guān)系模型之間缺乏固有的“親和力”從而產(chǎn)生面向?qū)ο蟪绦蛟O(shè)計向關(guān)系數(shù)據(jù)庫存取數(shù)據(jù)表示方式不一致的問題。由于要解決阻抗失配,從而產(chǎn)生了對象數(shù)據(jù)庫的概念。但是,由于對象關(guān)系數(shù)據(jù)庫只是在原有的關(guān)系數(shù)據(jù)庫的基礎(chǔ)上加入了面向?qū)ο蟮牟糠郑圆荒芡耆鉀Q抗阻失配問題。而解決只能靠對象數(shù)據(jù)庫OODB簡介OODB(ObjectOrientedDataBase)既面向?qū)ο髷?shù)據(jù)庫。對象關(guān)系數(shù)據(jù)庫是在關(guān)系數(shù)據(jù)庫的基礎(chǔ)上加入面向?qū)ο笏枷攵纬傻?。是面向?qū)ο髷?shù)據(jù)庫發(fā)展的一個分支。OO(ObjectOriented)面向?qū)ο蟮乃枷氚熏F(xiàn)實世界抽象為一系列對象及其聯(lián)系的集合。面向?qū)ο蟪绦蛟O(shè)計方法是一種支持模塊化程序設(shè)計和軟件重用的編程方法,它把程序設(shè)計的主要活動限定為建立對象及其聯(lián)系。一個面向?qū)ο蟪绦蚓褪窍嗷ヂ?lián)系的對象集合。封裝性和繼承性是對象概念兩個重要的特性。

對象對象是一組數(shù)據(jù)結(jié)構(gòu)以及在這些數(shù)據(jù)結(jié)構(gòu)上的操作的程序代碼封裝起來的基本單位,一個對象應(yīng)該包括幾個部分屬性集合:所有屬性構(gòu)成了對象數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu),屬性可以是值或者值的集合也可以是對象。方法集合:方法描述了對象的行為特性。一個是方法的接口,二是方法的實現(xiàn)。OID(對象標識)數(shù)據(jù)庫中每個對象都有一個唯一不便的標識即為OID,它具有永久性,而且是作用于整個系統(tǒng)的,要區(qū)別于關(guān)系數(shù)據(jù)庫中得碼的概念。他是獨立于值的,系統(tǒng)全局唯一的。封裝每個對象是起狀態(tài)與行為的封裝。也即是屬性和方法(操作)。封裝對象是對象外部界面與內(nèi)部現(xiàn)實之間隔離的一種抽象。外部與外界的通信只能通過消息。對象封裝之后查詢屬性只能通過調(diào)用對象的方法。不能直接修改。類有共同屬性和方法的所有對象構(gòu)成一個類,而對象是一個類的實例。類的屬性可以是基本類,也即基本的數(shù)據(jù)類型例如字符,整型,布爾型,也可以是類。繼承繼承也是面向?qū)ο笏枷胫械囊粋€重要概念。由于面向?qū)ο髷?shù)據(jù)模型的一種類層次結(jié)構(gòu),而產(chǎn)生了繼承,分為單繼承和多重繼承。對象的嵌套既對象的屬性可以是對象。對象關(guān)系數(shù)據(jù)庫ORDBS是OODBS的一個分支,即RDBMS的OO擴充。它以關(guān)系型的方式僅吸取OO部分功能,既支持廣泛使用的SQL,又具有OO特性,適應(yīng)了傳統(tǒng)應(yīng)用領(lǐng)域發(fā)展和新應(yīng)用領(lǐng)域的需要。而SQL標準從1999年的SQL-3添加了對對象的支持。它有如下特征:對基本類型擴充的支持

具有可擴充的數(shù)據(jù)類型、函數(shù)和操作符,并把一些數(shù)據(jù)類型及有關(guān)的函數(shù)、操作符和訪問方法進行封裝。對復(fù)雜對象的支持

通過一些構(gòu)件把多種基本類型或用戶定義類型構(gòu)建成復(fù)雜對象。其中最基本的構(gòu)件是組合、集合和引用。支持繼承

子類對超類各種特性的繼承,包括數(shù)據(jù)繼承和函數(shù)繼承、單繼承和多重繼承。提供強大和通用的規(guī)則系統(tǒng)

RDBMS通過約束定義和觸發(fā)器對規(guī)則提供支持,ORDBMS支持的規(guī)則系統(tǒng)更強大靈活近年國際上主要數(shù)據(jù)庫產(chǎn)品ORACLE,INGRESS,UDB均先后推出ORDBS的功能結(jié)構(gòu)模式,這可能預(yù)兆著今后數(shù)據(jù)庫發(fā)展的方向。對象-關(guān)系數(shù)據(jù)庫的數(shù)據(jù)類型關(guān)系類型LOB大對象類型BOOLEAN類型集合ARRAYDISTINGCT類型對象類型行對象與行類型列對象與列類型ADT(抽象類型)行對象和行類型行對象是代表表中一行數(shù)據(jù)的數(shù)據(jù)類型。創(chuàng)建語句CREATEROWTYPE<ROW_TYPE_NAME>(<組件聲明>);例如:CREATEROWTYPEROW1(firstchar(n),secondchar(n),thirdinteger,……);用行類型可以創(chuàng)建表中表,也即是不符合第一范式的表。所以,對象數(shù)據(jù)庫是不受范式約束的。主要原因(個人認為)

由于范式的產(chǎn)生是參照表中各項的關(guān)系來約束的,所有關(guān)系數(shù)據(jù)庫中存在著范式的約束。但是由于對象的與關(guān)系的區(qū)別,所以面向?qū)ο蟮臄?shù)據(jù)庫不能被范式約束。建立基于行類型的表CREATETABLETNAMEOFROW_TYPE_NAME(****PRIMARYKEY);表中每行是一個對象,有OID標識。

列對象與列類型CREATETYPEONAMEASOBJECT(FIRSTCHAR(N),SECONDCHAR(N),THIRDINTEGER,……);CREATTABLEOTABLE(ONAME1FIRST,ONAME2SECONDONAME3THIRD,……….);行列類型序行列類型可以創(chuàng)建其他的復(fù)雜對象,行具有類的特性,而列則是對象。行列式不具有封裝特性的因為他們沒有定義自己的方法。所以數(shù)據(jù)也無法和外界隔離。在實際的應(yīng)用中主要還是應(yīng)用ADT,就是允許用戶自定義的類型,抽象數(shù)據(jù)類型。ADT抽象數(shù)據(jù)類型,見數(shù)據(jù)結(jié)構(gòu)。用戶可以自己定義的類型。建立方法:CREATETYPE<TYPENAME>(

屬性,方法

);ADT的特點(1)ADT的屬性定義和行類型的屬性定義類同。(2)在創(chuàng)建ADT的語句中,通過用戶定義的函數(shù)比較對象的值。如果不定義該類型的比較函數(shù),則采用默認的等于和小于函數(shù)來比較對象的大小。(3)ADT的行為通過方法methods、函數(shù)function實現(xiàn)。(4)SQL3要求抽象數(shù)據(jù)類型是封裝的,而行類型則不要求封裝。(5)ADT有3個通用的系統(tǒng)內(nèi)置函數(shù),構(gòu)造函數(shù)(ConstructionFunction)、觀察函數(shù)(Observerfunction)和刪除函數(shù)(MutationFunction)。(6)支持繼承。對象到關(guān)系的映射(ORM)1屬性類型映射成域?qū)傩灶愋陀成涑蓴?shù)據(jù)庫中的域。2屬性映射成字段類的屬性映射至關(guān)系數(shù)據(jù)庫中0個或多個字段。3類映射成表類直接或間接映射成表。ADT方法的實現(xiàn)參照類型SQL3提供了一種特殊的類型:參照類型,也稱為引用類型,簡稱REF類型。因為類型直接可能具有相互參照的聯(lián)系,因此引入了一個REF類型的概念:REF<類型名>REF類型總是和某個特定的類型相聯(lián)系。它的值是OID。OID是系統(tǒng)生成的,不能修改。繼承類型ORDBMS應(yīng)該支持繼承性,一般是單繼承性。NOTFINAL表示不是類層次結(jié)構(gòu)中最后的葉節(jié)點,F(xiàn)INAL則表示該類型是類層次結(jié)構(gòu)的葉節(jié)點。既決定了可不可以被繼承。子表和超表簡單來說就是表與表之間的繼承。操作時是對表和他的所有子表進行操作。添加ONLY可以實現(xiàn)對單獨表的操作。進行映射后的表對象屬性1屬性2屬性3OID1OID2OID3OID4整個表為類Primarykey再次介紹OID針對于對象,需要能夠唯一識別它們的標識符。在關(guān)系數(shù)據(jù)庫中,對應(yīng)的概念稱之為鍵(Key);在面向?qū)ο蟮募夹g(shù)中,稱之為OID(ObjectID)。OID在對象模型中的典型實現(xiàn)是作為完整的對象,而在關(guān)系模型中,則作為整數(shù)來實現(xiàn),或者對于較大的應(yīng)用中,以若干整數(shù)來實現(xiàn)。關(guān)系數(shù)據(jù)庫中實現(xiàn)繼承在關(guān)系數(shù)據(jù)庫中,一個關(guān)鍵問題是表主鍵的唯一性策略的選取。適當?shù)姆桨改軆?yōu)化繼承、組合及對象之間關(guān)系的實現(xiàn)??紤]類的繼承問題。在關(guān)系數(shù)據(jù)庫中保存對象時,基本上問題歸結(jié)于“如何在數(shù)據(jù)庫中組織被繼承的屬性?”該問題的不同解決方案會影響到整個設(shè)計。關(guān)系數(shù)據(jù)庫中實現(xiàn)繼承的方法關(guān)系數(shù)據(jù)庫中實現(xiàn)繼承的方法可劃分為三類:

1.

將整個類層次映射為單個數(shù)據(jù)庫表。2.

每個具體子類映射成單個數(shù)據(jù)庫表。3.

每個類均映射為數(shù)據(jù)庫表。1.

將整個類層次映射為單個數(shù)據(jù)庫表。類層次的所有類映射為單個的數(shù)據(jù)庫表,表中保存所有類(基類、子類)的屬性。優(yōu)點:實現(xiàn)簡單。支持多態(tài)——對象角色發(fā)生變化,或存在多重角色時。報表操作實現(xiàn)簡單:表中包含了所有信息。缺點:增加類層次中的耦合。類層次中任何類的屬性的增加都會導(dǎo)致表的變更;某個子類屬性的修改會影響到整個層次結(jié)構(gòu),而不僅僅是該子類。浪費了大量的數(shù)據(jù)庫空間。可能需要指明具體的角色。2每個具體子類映射成單個數(shù)據(jù)庫表。數(shù)據(jù)庫表包括自身的屬性和繼承的屬性,每個具體的子類包含各自的OID。抽象的基類不參與映射。優(yōu)點:報表操作實現(xiàn)簡單:表中包含了具體子類的所有信息。缺點:類的修改會導(dǎo)致相對應(yīng)的表及其子類所對應(yīng)表的更改。角色的更改會造成ID的重新賦值(因為不同子類的ID可能重復(fù))。難以在支持多重角色時,保持數(shù)據(jù)的完整性。3.

每個類均映射為數(shù)據(jù)庫表。

(子表與超表)為每一個類創(chuàng)建數(shù)據(jù)庫表,表中包含特定于該類的屬性和OID。優(yōu)點:與面向?qū)ο蟮母拍畹囊恢滦宰詈谩Χ鄳B(tài)的支持最好,對于對象所可能充當?shù)慕巧珒H需要在相應(yīng)的表中保存記錄。易于修改基類和增加新的類。缺點:數(shù)據(jù)庫中存在大量的表。訪問數(shù)據(jù)的時間較長。對報表的支持較差,除非定義視圖。關(guān)系映射(參照類型)不僅僅是對象需要被映射至數(shù)據(jù)庫,對象之間的關(guān)系也需要映射至數(shù)據(jù)庫。對象之間的關(guān)系可分為:繼承(Inheritance),關(guān)聯(lián)(association),聚集(aggregation),組合(composition)。要有效地映射關(guān)系,必須理解它們之間的不同點,如何實現(xiàn)一般的關(guān)系以及如何實現(xiàn)特定的多對多關(guān)系。但是由于對象之間的關(guān)系接觸最多的是繼承,以講解,其他的關(guān)系主要講以下三點。關(guān)系映射(續(xù))關(guān)系數(shù)據(jù)庫之間的

溫馨提示

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

評論

0/150

提交評論