重郵版第十二章_第1頁
重郵版第十二章_第2頁
重郵版第十二章_第3頁
重郵版第十二章_第4頁
重郵版第十二章_第5頁
已閱讀5頁,還剩38頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第十二章對象—關(guān)系數(shù)據(jù)庫本章要點面向?qū)ο蟮幕靖拍顚ο蠖x語言O(shè)DL對象關(guān)系模型面向?qū)ο笤O(shè)計和關(guān)系設(shè)計與復(fù)雜類型有關(guān)的查詢12.1面向?qū)ο蟮幕靖拍蠲嫦驅(qū)ο髷?shù)據(jù)庫(ObjectOrientedDataBase,OODB):以面向?qū)ο髷?shù)據(jù)模型為基礎(chǔ),對數(shù)據(jù)對象的行為進(jìn)行建模,用已有的面向?qū)ο蟪绦蛟O(shè)計語言來透明地訪問數(shù)據(jù)庫對象-關(guān)系數(shù)據(jù)庫(ObjectRelationalDataBaseSystem,ORDBS):以關(guān)系數(shù)據(jù)庫和SQL為基礎(chǔ),在關(guān)系數(shù)據(jù)庫模型上添加面向?qū)ο蟮奶匦?,并對SQL語言進(jìn)行擴(kuò)充12.1.1類類(Class):是對共享同樣屬性和方法的所有對象的抽象描述,每個對象稱為類的實例(Instance)類相當(dāng)于關(guān)系模型中的關(guān)系模式,類的屬性相當(dāng)于關(guān)系模式中的屬性,對象相當(dāng)于元組類的組成:變量集合、在類之間通信的消息集合,實現(xiàn)消息的方法集合面向?qū)ο髷?shù)據(jù)庫模式就是類的集合12.1.2對象對象(Object):是對客觀世界中存在實例的抽象描述,是由一組數(shù)據(jù)和在這組數(shù)據(jù)上操作的程序代碼封裝而成的基本單位對象的組成:變量集合:描述對象狀態(tài)、組成和特性的數(shù)據(jù)消息集合:能由對象接收和響應(yīng),是對象與系統(tǒng)進(jìn)行交互的接口方法集合:是實現(xiàn)消息的代碼段,是對對象的操作,方法返回值是對消息的響應(yīng)。12.1.3繼承繼承:是面向?qū)ο蠹夹g(shù)中一個重要而基本的概念,是一個類自動繼承其他類所有屬性和方法的機(jī)制由現(xiàn)有的類導(dǎo)出新的類,新的類被稱為原有類的“子類”(Subclass),是類的特化,而原有類稱為“超類”(Superclass),是類的泛化單繼承:一個子類只繼承一個超類的屬性和方法多重繼承:一個子類繼承了多個超類的屬性和方法12.1.4多重繼承注:從多個超類中繼承的屬性或方法有相同的名字,會引起二義性問題不同系統(tǒng)的解決辦法:重命名:將P分成兩個變量,一個命名為A.P,另一個命名為B.P系統(tǒng)根據(jù)類創(chuàng)建的順序,選擇其中一個作為子類的屬性變量用戶根據(jù)自己的需要,自己選擇屬性值系統(tǒng)將這種情況作為錯誤處理12.1.5對象標(biāo)識對象標(biāo)識(ObjectIdentifier,OID):具有永久性的,在全系統(tǒng)內(nèi)是唯一的,不隨對象的屬性值和方法的改變而改變對象標(biāo)識的特點:唯一性不可重用性獨立于對象狀態(tài)獨立于對象的物理存儲位置12.1.6對象包含對象包含又稱為對象嵌套,即一個對象的屬性也是一個對象包含其他對象的對象稱為復(fù)雜對象(ComplexObject)或復(fù)合對象(CompositeObject)類之間的包含關(guān)系實現(xiàn)了關(guān)系模型中的“is-part-of”聯(lián)系一個類的屬性可以是一個基本類也可以是一個一般類12.2面向?qū)ο笳Z言面向?qū)ο笳Z言是面向?qū)ο蟪绦蛟O(shè)計語言的擴(kuò)展,包括對象定義語言(ObjectDefinitionLanguage,ODL)和對象操作語言(ObjectManipulateLanguage,OML),其中OML又分為對象查詢語言(ObjectQueryLanguage,OQL)和對象控制語言(ObjectControlLanguage,OCL)12.3對象關(guān)系模型在關(guān)系數(shù)據(jù)庫和SQL上添加面向?qū)ο筇匦缘膶ο?關(guān)系數(shù)據(jù)庫,既保持了關(guān)系數(shù)據(jù)庫系統(tǒng)非過程化的數(shù)據(jù)存取方式和數(shù)據(jù)的獨立性,繼承了關(guān)系數(shù)據(jù)庫原有的數(shù)據(jù)管理能力,又增加了數(shù)組、集合等有繼承性及對象標(biāo)識的面向?qū)ο筇匦缘臄?shù)據(jù)模型和對這些類型操作的能力,因此對象-關(guān)系數(shù)據(jù)庫比面向?qū)ο髷?shù)據(jù)庫更普遍12.3.1嵌套關(guān)系嵌套關(guān)系模型是關(guān)系模型的一個擴(kuò)展,也就是說,關(guān)系可以存儲在關(guān)系中,一個復(fù)雜對象就可以用嵌套關(guān)系的一個元組來表示12.3.2復(fù)雜類型對象關(guān)系數(shù)據(jù)庫在基本數(shù)據(jù)類型的基礎(chǔ)上提供了諸如數(shù)組、集合、記錄等復(fù)雜數(shù)據(jù)類型,元組的屬性中可以包含復(fù)雜的數(shù)據(jù)類型集合類型:一組相同類型元素組成的滿足一定要求的有序集合被稱為集合類型,又稱為聚集類型集合類型一般分為以下5種集合類型(SetType):一組有相同類型的元素?zé)o序無重復(fù)的集合多重集合類型:也稱為包集合(Multiset/BagType),一組具有相同類型的元素?zé)o序有重復(fù)的集合列表集合(ListType):一組類型相同的元素有序且可以重復(fù)的集合,但集合中元素位置可變,可按位置訪問或更改數(shù)組類型(ArrayType):一組類型相同的元素有序且可以重復(fù)的集合,元素也可按位置訪問或更改,但元素位置是不可變的字典類型(DictionaryType):由一組“<碼,值>”(<k,v>)對構(gòu)成的無序無重復(fù)的集合,一般用于索引結(jié)構(gòu)結(jié)構(gòu)類型(StructuredType):又稱為元組類型(TupleType)或行類型(RowType),是一組有密切關(guān)系但屬性屬于不同數(shù)據(jù)類型的數(shù)據(jù)所構(gòu)成的元組【例12-2】在購買記錄中有一個購買日期為MyData類型,為購買日期和購買記錄定義如下:CREATETYPEMyDate(dayINTEGER,monthINTEGER,yearINTEGER)CREATETYPEList(clothing-NoINTEGER,addressMyString,dateMyDate,phoneSETOF(INTEGER),buyerSETOF(MyString))CREATETABLElistOFTYPEList大對象類型(LargeObject,LOB):對象關(guān)系數(shù)據(jù)庫支持大對象的存儲大對象類型分為以下4種:二進(jìn)制數(shù)據(jù)大對象類型(BinaryLargeObject,BLOB):一般存儲音頻、圖像數(shù)據(jù)等字符型數(shù)據(jù)大對象類型(harLargeObject,CLOB):一般存儲長字符串、文本型數(shù)據(jù)等字節(jié)字符型數(shù)據(jù)大對象類型(NCharLargeObject,NCLOB)二進(jìn)制文件(BinaryFILE,BFILE):存儲在數(shù)據(jù)庫外的操作系統(tǒng)文件中,是只讀的,不能參與數(shù)據(jù)庫的事務(wù)12.3.3引用類型引用類型又叫參照類型,簡稱REF類型,它具有面向?qū)ο蟪绦蛟O(shè)計語言提供的對對象的引用功能【例12-3】在網(wǎng)上服裝銷售系統(tǒng)中,要對部分顧客信息進(jìn)行引用,可以定義如下:buyerSETOF(REF(Customer))引用類型一般有兩種實現(xiàn)方式:一種是對類型的引用,另一種是對元組的引用【例12-4】VIP對Person的引用限制在Customer表中的元組中,其定義如下:VIPREF(Person)SCOPECustomer12.3.4繼承類型類型繼承:類型繼承是對象-關(guān)系數(shù)據(jù)庫中類型之間最基本的關(guān)聯(lián)?!纠?2-5】設(shè)人的類型定義為Person,用類型繼承的方法定義管理員和顧客的類型Seller和Customer如下:CREATETYPEPerson(nameMyString,social-securityINTEGER)如果希望管理員和顧客有不同于Person的屬性存在,可以自定義Seller和Customer類型如下:

CREATETYPESeller(numberINTEGER,departmentMyString)UNDERPersonCREATETYPECustomer(numberINTEGER,addressMyString,phoneINTEGER)UNDERPerson【例12-6】當(dāng)管理員購買自己服裝店中的服裝時,用類型繼承的方式定義員工顧客的類型Seller-Customer如下:CREATETYPESeller-CustomerUNDERSeller,Customer【例12-7】使用換名子句AS重新對員工顧客的類型Seller-Customer定義如下:CREATETYPESeller-CustomerUNDERSellerWITH(numberASSeller-No),CustomerWITH(numberASCustomer-No)【例12-8】將員工顧客的類型Seller-Customer看作是“葉節(jié)點”,則定義如下:CREATETYPESeller-CustomerUNDERSellerWITH(numberASSeller-No),CustomerWITH(numberASCustomer-No)FINAL;表繼承:與類型繼承概念相似,子表的類型必須是超表類型的子類型,即超表中的每個屬性都出現(xiàn)在子表中?!纠?2-9】設(shè)有表Person,定義其子表seller和customer如下:CREATETABLEPerson(nameMyString,social-securityINTEGER)CREATETABLEseller(numberINTEGER,departmentMyString)UNDERPeopleCREATETABLEcustomer(numberINTEGER,addressMyString,phoneINTEGER)UNDERPeople【例12-10】子表seller-customer可以定義如下:CREATETABLEseller-customerUNDERsellerWITH(numberASseller-No)customerWITH(numberAScustomer-No)12.4面向?qū)ο笤O(shè)計和關(guān)系設(shè)計從面向?qū)ο髮傩缘疥P(guān)系屬性對象元素關(guān)系模型元素域域類表接口無屬性列標(biāo)識符碼操作(具有存儲過程范型)存儲過程操作(具有存儲功能范型)存儲功能關(guān)聯(lián)外碼或表關(guān)聯(lián)類表和兩個指向關(guān)聯(lián)的類所生成的外碼繼承表或外碼依賴無實現(xiàn)無引用無對象元素和關(guān)系模型元素的對應(yīng)關(guān)系將對象模型轉(zhuǎn)換成關(guān)系模型的轉(zhuǎn)換規(guī)則:(1)類的轉(zhuǎn)換:一個類或?qū)ο罂梢灾苯愚D(zhuǎn)換成關(guān)系數(shù)據(jù)庫中的一個表,屬性類型則映射成數(shù)據(jù)庫中的域(2)繼承的轉(zhuǎn)換:類中父類與子類的繼承關(guān)系也不能直接映射到關(guān)系數(shù)據(jù)庫中,有3種方法將繼承關(guān)系映射到單個表中,即整個繼承關(guān)系被轉(zhuǎn)換成一張表,把子類中的屬性合并到父類中,將父類映射成一個表,通過表中的列來區(qū)分不同的類。每個類映射成一個表,繼承關(guān)系中的每個類都會生成單獨的表,子類的表和父類的表通過外碼關(guān)聯(lián),外碼同時作為子類表的主碼每個具體的類映射成一個表,即只有繼承關(guān)系中的葉子節(jié)點類才會轉(zhuǎn)換成表,父類不進(jìn)行轉(zhuǎn)換,每個非葉子節(jié)點的類屬性所生成的列會對應(yīng)到葉子類的表中。(3)多重關(guān)系的轉(zhuǎn)換:類的關(guān)系映射中,一對一的關(guān)系一般不多,一對多的關(guān)系在數(shù)據(jù)庫中也能直接實現(xiàn),但是多對多的關(guān)系要進(jìn)行分解關(guān)聯(lián)轉(zhuǎn)換規(guī)則一對一單向的關(guān)聯(lián)轉(zhuǎn)化時會生成一個外碼,外碼的方向和關(guān)聯(lián)的方向一致,父表的主碼會對應(yīng)成子表的外碼。而雙向的關(guān)聯(lián)則會生成兩個外碼,一般只需在一個表中保留外碼,將關(guān)聯(lián)屬性轉(zhuǎn)到此表中,刪除另一個表中的外碼。一對多不管是單向還是雙向,都只在多端表中生成外碼,多端持久類生成的表為子表,父表的主鍵會對應(yīng)成子表的外碼。例如每個服裝店都可以有多個雇員,將服裝店與雇員的雇傭關(guān)系表現(xiàn)在雇員表中,即雇員的屬性中加上店名一項,或是按照下面多對多的方式映射成表多對多將對象之間的關(guān)聯(lián)行為單獨地映射到一張表中,此表的屬性由兩個對象的主關(guān)鍵字和關(guān)聯(lián)屬性構(gòu)成多重關(guān)系的轉(zhuǎn)換規(guī)則(4)關(guān)聯(lián)的轉(zhuǎn)換:類或?qū)ο蟮臄?shù)據(jù)耦合性較低時可直接映射成數(shù)據(jù)庫中的表,不必為對象之間或類之間的關(guān)系建立表,也不必設(shè)計數(shù)據(jù)的完整性;若數(shù)據(jù)之間有一定的耦合性時,則可以用SQL視圖為關(guān)系建立臨時的表聚集的轉(zhuǎn)換,即類或?qū)ο笾g存在整體與部分的關(guān)系時,關(guān)系映射成的表中關(guān)聯(lián)到子表的關(guān)鍵詞可以為空,映射成表后建立一對多的關(guān)系,并設(shè)置數(shù)據(jù)完整性規(guī)則,采用級聯(lián)修改和忽略插入刪除組合的轉(zhuǎn)換,主從關(guān)系的聚集,關(guān)系映射成的表中關(guān)聯(lián)到子表的關(guān)鍵詞不能為空,映射成表后建立一對多的關(guān)系,并設(shè)置數(shù)據(jù)完整性規(guī)則,修改和刪除都采用級聯(lián)和忽略插入。(5)關(guān)聯(lián)類的轉(zhuǎn)換:一些復(fù)雜的關(guān)聯(lián)關(guān)系本身也有一些屬性和操作,這種關(guān)聯(lián)關(guān)系一般用一個類來表示,稱其為關(guān)聯(lián)類。將兩個相關(guān)聯(lián)的類轉(zhuǎn)換成表的過程中,可以將關(guān)聯(lián)類單獨轉(zhuǎn)換成表。面向?qū)ο笾袑ο蟮臉?biāo)識:對象根據(jù)其存活的時間可以分為揮發(fā)性對象和持久化對象揮發(fā)性對象:瞬態(tài)標(biāo)識符,只有在創(chuàng)建它的程序正在執(zhí)行時才合法,一旦程序結(jié)束,對象被刪除,其標(biāo)識符就沒有意義了。持久性對象:持久化對象標(biāo)識符,在程序結(jié)束后仍然有效,持久(Persistent)程度大概分以下3種(1)過程內(nèi)部持久(Intra-procedure)(2)程序內(nèi)部持久(Intra-program)(3)程序之間持久(Inter-program)

關(guān)系模型與對象關(guān)系模型的區(qū)別關(guān)系模型采用的數(shù)據(jù)模型要求數(shù)據(jù)有較高的結(jié)構(gòu)化,是面向機(jī)器的語法數(shù)據(jù)模型;只能處理非嵌套事務(wù),引起數(shù)據(jù)的冗余,不利于查詢和更新;連接過多不同的關(guān)聯(lián)表,造成操作時間較長,在事務(wù)發(fā)生故障時,數(shù)據(jù)庫的恢復(fù)比較困難對象關(guān)系模型能夠支持復(fù)雜對象,保護(hù)數(shù)據(jù)的完整性;支持類型及表的繼承,有效地減少了數(shù)據(jù)的冗余;允許嵌套屬性的存在,能夠以更少的花費、更快的速度建立并維護(hù)數(shù)據(jù)庫;由于復(fù)雜對象的屬性和操作被封裝在一起,類型與類型之間可以繼承,相應(yīng)減少了關(guān)系模型中表之間的連接操作12.5與復(fù)雜類型有關(guān)的查詢經(jīng)過對SQL語句進(jìn)行擴(kuò)展,SQL可以處理復(fù)雜類型的查詢基于關(guān)系值的屬性路徑表達(dá)式聚組與析組(1)基于關(guān)系值的屬性:擴(kuò)展后的SQL允許用于計算關(guān)系值的表達(dá)式出現(xiàn)在關(guān)系名能夠出現(xiàn)的任何地方【例12-11】創(chuàng)建購買記錄list表如下:CREATETABLElist(clothing-NoINTEGER,addressMyString,dateMyDate,phoneSETOF(INTEGER),buyerSETOF(REF(Customer)))【例12-12】查詢電話為“12345678”服裝店的位置。SELECTaddressFROMlistWHERE"12345678"INphone【例12-13】查詢每款服裝購買者的名字。SELECTA.clothing-No,B.nameFROMlistASA,A.buyerASB聚集函數(shù)(如min()、max()和count())是一個以屬性為集合,將其作為參數(shù)并返回的函數(shù)。它們可以用于任何以關(guān)系值為返回結(jié)果的SELECT表達(dá)式中?!纠?2-14】計算每款服裝的購買人數(shù)。SELECTclothing-No,COUNT(buyer)FROMlist

(2)路徑表達(dá)式:同計算關(guān)系值表達(dá)式一樣,路徑表達(dá)式也可以出現(xiàn)在SELECT、WHERE和FROM子句中【例12-15】定義管理員-購買記錄表s-list如下:CREATETABLEs-list(sellREF(seller))UNDERlist【例12-16】找出所有管理員的名字。SELECTFROMs-list路徑表達(dá)式【例12-17】查詢所有服裝的所有購買者的名字。SELECTA.nameFROMs-list.buyerASA

【例12-18】查找員工號為“123”的員工售出的服裝號。SELECTs-list.clothing-NoFROMs-listWHERE

s-list.sell.number="123

溫馨提示

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

評論

0/150

提交評論