![第十一章 面向?qū)ο髷?shù)據(jù)庫_第1頁](http://file1.renrendoc.com/fileroot_temp2/2020-4/2/dee63140-1e23-4f87-ae7c-da63eb6d0ccf/dee63140-1e23-4f87-ae7c-da63eb6d0ccf1.gif)
![第十一章 面向?qū)ο髷?shù)據(jù)庫_第2頁](http://file1.renrendoc.com/fileroot_temp2/2020-4/2/dee63140-1e23-4f87-ae7c-da63eb6d0ccf/dee63140-1e23-4f87-ae7c-da63eb6d0ccf2.gif)
![第十一章 面向?qū)ο髷?shù)據(jù)庫_第3頁](http://file1.renrendoc.com/fileroot_temp2/2020-4/2/dee63140-1e23-4f87-ae7c-da63eb6d0ccf/dee63140-1e23-4f87-ae7c-da63eb6d0ccf3.gif)
![第十一章 面向?qū)ο髷?shù)據(jù)庫_第4頁](http://file1.renrendoc.com/fileroot_temp2/2020-4/2/dee63140-1e23-4f87-ae7c-da63eb6d0ccf/dee63140-1e23-4f87-ae7c-da63eb6d0ccf4.gif)
![第十一章 面向?qū)ο髷?shù)據(jù)庫_第5頁](http://file1.renrendoc.com/fileroot_temp2/2020-4/2/dee63140-1e23-4f87-ae7c-da63eb6d0ccf/dee63140-1e23-4f87-ae7c-da63eb6d0ccf5.gif)
已閱讀5頁,還剩49頁未讀, 繼續(xù)免費閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
數(shù)據(jù)庫實用教程 第三版 第十一章面向?qū)ο髷?shù)據(jù)庫 清華大學(xué)出版社董健全2020年4月14日 本章概念 ODMG標(biāo)準(zhǔn)的核心概念 面向?qū)ο髷?shù)據(jù)模型的基本概念 持久化程序設(shè)計語言的基本概念 基于C 的面向?qū)ο髷?shù)據(jù)庫的對象定義語言和對象操縱語言 OODB與ORDB的比較 使用UML類圖來概念對象建模 第十一章面向?qū)ο髷?shù)據(jù)庫 1 ODMG組織和標(biāo)準(zhǔn)ODMG ObjectDataManagementGroup ODMG93是用于面向?qū)ο髷?shù)據(jù)管理產(chǎn)品接口的一個定義 ODMG93標(biāo)準(zhǔn)有五個核心概念 1面向?qū)ο髷?shù)據(jù)庫系統(tǒng)概述 ODMG93標(biāo)準(zhǔn)有五個核心概念 1 對象是基本的數(shù)據(jù)結(jié)構(gòu) 是存儲和操作的基本單位 2 每個對象有一個永久的標(biāo)識符 這個標(biāo)識符在該對象的整個生命期中都有效 即不論該對象是存儲在外存中還是內(nèi)存中 該標(biāo)識符都必須是有效的 3 對象可以被指定類型和子類型 對象被創(chuàng)建為一個給定的類型 對象還可以定義為其他對象的子類型 此時 它們繼承父類型的所有數(shù)據(jù)特性和行為 4 對象狀態(tài)由數(shù)據(jù)值與聯(lián)系定義 5 對象行為由對象操作定義 2 OODBS的概念一個面向?qū)ο髷?shù)據(jù)庫系統(tǒng) OODBS 應(yīng)該滿足兩個標(biāo)準(zhǔn) 首先它是一個數(shù)據(jù)庫系統(tǒng) DBS 具備DBS的基本功能 譬如查詢語言 散列或成組存取方法 事務(wù)管理 一致性控制及恢復(fù) 其次是一個面向?qū)ο笙到y(tǒng) 是針對面向?qū)ο蟪绦蛟O(shè)計語言的持久性對象存儲管理而設(shè)計的 充分支持完整的面向?qū)ο蟾拍詈蜋C制 譬如用戶自定義數(shù)據(jù)類型 自定義函數(shù) 對象封裝等必不可少的特點 OODBS表達為 面向?qū)ο笙到y(tǒng) 數(shù)據(jù)庫能力 1 對象 object 對象由三個部分組成 1 一組變量 它們包含對象的數(shù)據(jù) 變量相當(dāng)于ER模型中的屬性 2 一組消息 這是一個對象所能響應(yīng)的消息集合 每個消息可有若干參數(shù) 對象接受消息后應(yīng)作出相應(yīng)的響應(yīng) 3 一組方法 Method 每個方法是實現(xiàn)一個消息的代碼段 一個方法返回一個值作為對消息的響應(yīng) 對象的方法可以分為只讀型和更新型兩種 2面向?qū)ο髷?shù)據(jù)模型的基本概念 2 類 class 在數(shù)據(jù)庫中通常有很多相似的對象 相似 是指它們響應(yīng)相同的消息使用相同的方法 并且有相同名稱和類型的變量 將相似的對象分組形成了一個 類 Class 類是相似對象的集合 類中每個對象也稱為類的實例 Instance 一個類中的所有對象共享一個公共的定義 盡管它們對變量所賦予的值不同 面向?qū)ο髷?shù)據(jù)模型中類的概念相當(dāng)于ER模型中實體集的概念 例 用偽碼寫一個 職員 類的定義 定義中給出了類似的變量和類的對象所響應(yīng)的消息 處理這些消息的方法在這里未給出 classemployee 變量 stringname stringaddress datastart date intsalary 消息 intannual salary stringget name stringget address intset address stringnew address intemployment length 一個類對象包括兩部分內(nèi)容 1 一個集合變量 它的值是該類的所有實例對象所組成的集合 2 對消息new實施一個方法 用以創(chuàng)建類的一個新實例 3 繼承性繼承性允許不同類的對象共享它們公共部分的結(jié)構(gòu)和特性 繼承性可以用超類和子類的層次聯(lián)系實現(xiàn) 單繼承性 一個子類可以繼承某一個超類的結(jié)構(gòu)和特性 多重繼承性 一個子類也可以繼承多個超類的結(jié)構(gòu)和特性 繼承性是數(shù)據(jù)間的泛化 細化聯(lián)系 是一種 isa 聯(lián)系 表示了類之間的相似性 圖中 每個職員 employee 是一個人 person 人是職員的泛化 抽象化 職員是人的細化 具體化 person是超類 employee是子類 等等 例 銀行日常工作中涉及到各類人員的細化層次的類繼承層次圖 偽代碼定義如下 classperson 人 stringname 姓名 stringaddress 地址 classcustomerisaperson 客戶 intcredit rating 信用度 classemployeeisaperson 職員 datestart date 工作起始日期 intsalary 工資 classofficerisaemployee 高級職員 intoffice number 工號 intexpense account number 經(jīng)費賬號 classtellerisaemployee 職員 inthours per week 每周工作量 intstation number 柜號 classsecretaryisaemployee 秘書 inthours per week 每周工作量 stringmanager 經(jīng)理姓名 例 下圖是人的又一個細化圖 faculty和student是person的細化子類 有的人既是教師又是學(xué)生 faculty student應(yīng)是faculty和student這兩個類的子類 即 多重繼承性 4 對象標(biāo)識 ObjectIdentifier 簡記為OID 面向?qū)ο笙到y(tǒng)提供 對象標(biāo)識符 的概念來標(biāo)識對象 OID與對象的物理存儲位置無關(guān) 也與數(shù)據(jù)的描述方式和值無關(guān) OID是惟一的 也就是說 每個對象具有單一的標(biāo)識符 在對象創(chuàng)建的瞬間 由系統(tǒng)賦給對象一個OID值 它在系統(tǒng)內(nèi)是惟一的 在對象生存期間 標(biāo)識是不能改變的 對象標(biāo)識是指針一級的概念 是一個強有力的數(shù)據(jù)操縱原語 也是對集合 元組和遞歸等復(fù)合對象操縱的基礎(chǔ) 5 對象包含不同類的對象之間可能存在著包含關(guān)系 即組合關(guān)系 下圖 自行車結(jié)構(gòu)的數(shù)據(jù)庫的類包含層次圖 圖中 自行車是車輪 車閘 齒輪 車架的組合 車輪又包括鋼圈 輻條和輪胎 結(jié)構(gòu)的每一個構(gòu)件都描述為一個對象 同時構(gòu)件間的包含也可以用對象間的包含來描述 包含其他對象的對象稱為復(fù)合對象 包含關(guān)系可以有多層 形成類包含層次圖 包含是一種 是一部分 ispartof 聯(lián)系 如 車輪是自行車的一部分 而不能說 車輪是一輛自行車 因此 包含與繼承是兩種不同的數(shù)據(jù)聯(lián)系 一 持久化程序設(shè)計語言1 持久化語言與嵌入式語言的區(qū)別 1 在嵌入式語言中 宿主語言的類型系統(tǒng)與SQL的類型系統(tǒng)不同 程序員要負責(zé)宿主語言與DML之間的類型轉(zhuǎn)換 持久化程序設(shè)計語言的查詢語言與宿主語言完全集成在一塊 具有相同的類型系統(tǒng) 創(chuàng)建對象并將之存儲在數(shù)據(jù)庫中 不需要任何顯式的類型或格式改變 任何格式轉(zhuǎn)換對程序員都是透明的 2 使用嵌入式查詢語言的程序員要負責(zé)編寫程序把數(shù)據(jù)從數(shù)據(jù)庫中取出放到內(nèi)存中 在更新時 程序員還需編寫程序段將更新過的數(shù)據(jù)寫回數(shù)據(jù)庫 而在持久化語言中 程序員可以直接操縱持久數(shù)據(jù) 而不必為存取數(shù)據(jù)編寫程序 3ODMG93和持久化C 系統(tǒng) 2 持久化語言的三個基本概念 1 對象的持久性 要把OOPL變成持久化語言 第一步就是提供一種辦法 把對象區(qū)分成是持久的還是暫留的 在程序運行結(jié)束后 新創(chuàng)建的持久對象將被保存 而暫留對象將消失 2 對象標(biāo)識和指針 當(dāng)一個持久對象被創(chuàng)建時 它就要被分配一個持久的對象標(biāo)識符 當(dāng)創(chuàng)建的對象為暫留時 被分配一個暫留的對象標(biāo)識符 在程序終止后 對象被刪掉 標(biāo)識符失去意義 3 持久對象的存儲和訪問 邏輯上 實現(xiàn)類的方法的程序代碼應(yīng)該和類的類型定義一起作為數(shù)據(jù)庫模式的一部分存儲 但現(xiàn)在往往將程序代碼存儲在數(shù)據(jù)庫之外的文件中 目的是避免對編譯器和DBMS軟件進行集成 查找數(shù)據(jù)庫中對象的方法有三種 第一種方法是根據(jù)對象名找對象 實現(xiàn)時 每個對象有一個對象名 如同文件名一樣 這種方法對少量的對象是有效的 但對上百萬個對象就不適用了 第二種方法是依據(jù)對象標(biāo)識找對象 而對象標(biāo)識存儲在數(shù)據(jù)庫之外 第三種方法是將對象按聚集形式存放 然后利用程序循環(huán)找所需對象 聚集形式包括集合 Set 多集 Multiset 等 大多數(shù)OODBS都支持這三種訪問數(shù)據(jù)庫的方法 二 ODMGC 對象定義語言O(shè)DMGC 對象定義語言 C ODL 擴充了C 的類型定義語法 例 在第10章的對象聯(lián)系圖中 定義Faculty為新的類Person的子類 那么可得到下圖的帶泛化邊的對象聯(lián)系圖 帶泛化邊的對象聯(lián)系圖 該對象聯(lián)系圖用C ODL寫的代碼示例為 classPerson publicPersistent Object public stringname intage classFaculty publicPerson private intsalary public intfno Refworks forinverseUniversity staff Set teachinverseCoursetext teacher classUniversity publicPersistent Object public stringuname stringcity Refpresident Set staffinverseFaculty works for Set editinverseCoursetext editor classCoursetext publicPersistent Object public stringcname stringtextnameRefteacherinverseFaculty teach RefeditorinverseUniversity edit 三 ODMGC 對象操縱語言例 在上述數(shù)據(jù)庫中 插入教師開課信息 某教師開設(shè)了一門課及所使用教材的編寫學(xué)校 fno cname textname uname 假設(shè)教師及學(xué)校的數(shù)據(jù)均已在數(shù)據(jù)庫中存在 插入操作算法為 打開數(shù)據(jù)庫 事務(wù)開始 查詢工號為fno值的Faculty對象ofa 查詢校名為uname值的University對象oun 創(chuàng)建Coursetext對象oco 送入cname和textname值 在oco的teacher中插入Faculty對象ofa 在oco的editor中插入University對象oun 事務(wù)提交 commit 4ODMG97和對象語言 一 ODMG數(shù)據(jù)模型ODMG數(shù)據(jù)模型是OODBMS的基礎(chǔ) OODB是對象的集合 每個對象有一個惟一的對象標(biāo)識符 OID 類是具有類似性質(zhì)的對象的匯集 類的定義由三部分組成 1 屬性 Attributes 屬性可以是基本類型 也可以是復(fù)合類型 復(fù)合類型有struct array list bag set等五種 2 聯(lián)系 Relationships 聯(lián)系是指對象之間的引用或引用的匯集 ODMG模型中的聯(lián)系與ER模型中的二元聯(lián)系相類似 3 方法 Methods 方法是能應(yīng)用到類的對象上的函數(shù) 二 ODMGODLODMG數(shù)據(jù)庫模式定義為一系列接口 interface 的匯集 關(guān)鍵字interface 接口 用來定義一個類 對于每個接口 可以說明一個extent 范圍 它是代表類的當(dāng)前對象集的一個名字 實際上接口和范圍類似于關(guān)系模型中的關(guān)系模式和關(guān)系實例 例 對于前面的模式和對象聯(lián)系圖 我們可以用ODMGODL來定義 形式如下 interfacePerson extentPeople attributestringname attributeintegerage interfaceFaculty Person 類Faculty是類Person的子類 extentFacultieskeyfno attributeintegerfno attributeintegersalary relationshipUniversityworks forinverseUniversity staff relationshipSetteachinverseCoursetext teacher integernum teach raises noTeach 統(tǒng)計教師授課門數(shù)的一個方法 raises 引發(fā) 表示該方法可能引發(fā)的異常 interfaceUniversity extentUniversitieskeyuno attributeintegeruno attributestringuname attributestringcity relationshipFacultypresident relationshipSetstaffinverseFaculty works for relationshipSeteditinverseCoursetext editor integernum staff 統(tǒng)計學(xué)校人數(shù)的一個方法 interfaceCoursetext extentCoursetexts attributestringcname attributestringtextname relationshipFacultyteacherinverseFaculty teach relationshipUniversityeditorinverseUniversity edit 三 ODMGOQL1 OQL中的SELECT語句OQL允許人們用傳統(tǒng)的SELECT查詢語句來寫表達式 也具有消除重復(fù) 子查詢 排序等功能 例 用OQL的SELECT語句可以寫出下列查詢操作 檢索大學(xué)里授課門數(shù)超過3門的教師 要求顯示大學(xué)校名和教師姓名 顯示時屬性名為university name和faculty name SELECTuniversity name F works for unamefaculty name F nameFROMFacultyFWHEREF num teach 3 檢索上海地區(qū)大學(xué)中教師開設(shè)課程的課程名 SELECTDISTINCTC cnameFROMUniversityU U staffF F teachCWHEREU city shanghai 也可以用子查詢形式表達 但子查詢是出現(xiàn)在FROM子句中 SELECTDISTINCTC cnameFROMSELECTUFROMUniversityUWHEREU city shanghai D1 SELECTFFROMD1 staffF D2 D2 teachC 這個語句也可寫成WHERE子句中嵌子查詢的形式 SELECTDISTINCTC cnameFROMCoursetextCWHEREC teacherIN SELECTFFROMFacultyFWHEREF works forIN SELECTUFROMUniversityUWHEREU city shanghai 檢索復(fù)旦大學(xué)的教師 要求按年齡降序排列 若年齡相同按工資升序排列 SELECTFFROMUniversityU U staffFWHEREU uname FudanUniversity ORDERBYF ageDESC F salary OQL中SELECT語句查詢結(jié)果是集合 set 或包 bag 但加了ORDERBY子句后 輸出結(jié)果就成為列表 List 在集合 包中 行序是無所謂的 但在列表中 行序是重要的 下面查詢返回的是列表值而不是集合或多集 SELECTF fno F nameFROMFacultyFORDERBYF ageDESC 0 4 該查詢返回的是年齡最大的五位教師姓名值 表達式 0 4 表示抽取年齡最大的5個教師 檢索上海地區(qū)各大學(xué)中教師開課的課程名 要求顯示校名 教師名 課程名 SELECTStruc uname set name set cname FROMUniversityU U staffF F teachCWHEREU city shanghai SELECT子句中的表達式不必都是簡單的變量 可以是任何表達式 包括用類型構(gòu)造符構(gòu)成的表達式 上式中用了struct類型構(gòu)造符和set類型構(gòu)造符 SELECT子句后的struct字樣 是一種顯式地定義結(jié)構(gòu)類型的方式 在實際使用時也可省略 2 OQL表達式的附加格式OQL在SELECT語句格式中提供了全稱量詞 FORALL 和存在量詞 EXISTS 等謂詞 以及聚集運算符 分組子句和集合運算符 并 交和差 1 量詞表達式全稱量詞表達式的句法 FORALLxINS C x 該表達式用于檢測集合S的所有成員x是否都滿足條件C x 如果S中每個成員x都滿足C x 則該表達式結(jié)果為true 否則為false 存在量詞的表達式的句法 EXISTSxINS C x 該表達式用于檢測集合S中是否至少有一個成員x滿足條件C x 若存在 則該表達式結(jié)果為true 否則為false 例 寫出下列查詢操作的SELECT語句 檢索存在60歲以上教師的大學(xué)校名 SELECTDISTINCTU unameFROMUniversityUWHEREEXISTSFINU staff F age 60 F是元組變量 檢索教師年齡全在50歲以下的大學(xué)校名 SELECTU unameFROMUniversityUWHEREFORALLFINU staff F age 50 2 使用聚集操作和分組子句的SELECT語句OQL使用與SQL相同的五種聚集運算符 AVG COUNT SUM MIN和MAX 在傳統(tǒng)的SQL中 這些運算符只能應(yīng)用于表中指定列 而OQL中 同樣運算符可應(yīng)用于其成員為合適類型的聚集操作 即 COUNT可應(yīng)用于任何聚集 SUM和AVG可以用于基本類型的聚集 MAX和MIN可以用于任何可比較類型的聚集 OQL的SELECT語句也使用分組子句和組條件表達式子句 但增加了新意 例 寫出下列查詢操作的SELECTS語句 檢索每個年齡段教師平均授課門數(shù) SELECTF age avgNum AVG SELECTP F num teach FROMpartitionP FROMFacultyFGROUPBYF age 3 集合運算符像傳統(tǒng)的SQL一樣 OQL中也有并 交 差等集合操作 例 檢索教師人數(shù)不到1000人 但工資低于1500元的人數(shù)超過500人的那些大學(xué)的編號和校名 SELECTU uno U unameFROMUniversityUGROUPBYU uno U unameHAVINGU num staff 500 3 OQL中對象的賦值和建立 1 對宿主語言變量賦值傳統(tǒng)SQL需要在元組分量和宿主語言變量之間傳遞數(shù)據(jù) 而OQL則不同 可以很方便地把表達式的結(jié)果值賦給任何合適類型的宿主語言變量 例 檢索大于60歲的教師可用下列語句 SELECTFFROMFacultyFWHEREF age 60 該查詢結(jié)果的類型是set Faculty 如果oldFaculties是同類型的宿主語言變量 用擴充了OQL的C 可以寫成下列形式 oldFaculties SELECTFFROMFacultyFWHEREF age 60 并且oldFaculties的值將成為這些Faculty對象的集合 2 從聚集中提取元素獲取集合或者包的每個成員是比較復(fù)雜的 但比傳統(tǒng)SQL基于游標(biāo)的方法要簡單 首先 我們需要把集合或者包轉(zhuǎn)換成列表 這可以用帶ORDERBY子句的方法 例 檢索大于60歲的教師 要求查詢結(jié)果按工資 年齡降序排列 可用下列語句實現(xiàn) facultyList SELECTFFROMFacultyFWHEREF age 60ORDERBYF salaryDESC F ageDESC 該語句將把按工資 年齡降序排列的所有Faculty對象的列表賦給宿主語言變量facultyList 1 各種DBS的長處和優(yōu)勢可以概括如下 1 關(guān)系系統(tǒng) 數(shù)據(jù)類型簡單 查詢語言功能強大 高保護性 2 基于持久化語言的OODBS 支持復(fù)合數(shù)據(jù)類型 與程序設(shè)計語言集成一體化 高性能 3 ORDBS 支持復(fù)合數(shù)據(jù)類型 查詢語言功能強大 高保護性 該總結(jié)具有普遍性 但對有些DBS而言它們的分界線是模糊的 例如 有些以持久化語言為基礎(chǔ)的OODBS是在一個關(guān)系DBS之上實現(xiàn)的 這些系統(tǒng)的性能可能比不上那些直接建立在存儲系統(tǒng)之上的OODBS 但這些系統(tǒng)卻提供了關(guān)系系統(tǒng)所具有的較強保護能力 5OODB與ORDB的比較 2 OODB與ORDB的
溫馨提示
- 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)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 八年級歷史人教版下冊聽課評課記錄:第5課 三大改造
- 林地長期承包合同范本
- 鄉(xiāng)鎮(zhèn)精裝修商鋪出租合同范本
- 儲存場地租賃合同范本
- 廣告公司材料采購合同范本
- 二零二五年度無子女離婚協(xié)議書及子女教育資助合同
- 二零二五年度酒店會議室場地租賃及配套交通合同
- 二零二五年度酒吧租賃合同合同簽訂后的租賃物維護責(zé)任
- 2025年度商鋪轉(zhuǎn)讓三方合同附品牌使用權(quán)及營銷支持
- 夏令營代理商合作協(xié)議書范本
- 心肌梗死的心電圖改變
- 三星SHP-DP728指紋鎖說明書
- 預(yù)應(yīng)力錨索張拉及封錨
- 烤煙生產(chǎn)沿革
- GB 1886.227-2016食品安全國家標(biāo)準(zhǔn)食品添加劑嗎啉脂肪酸鹽果蠟
- 毛澤東思想課件-第七章 毛澤東思想的活的靈魂
- 公共關(guān)系效果的評估課件
- 建筑施工安全員理論考核試題與答案
- 高速公路用地勘測定界及放線定樁技術(shù)標(biāo)書
- 華萊士標(biāo)準(zhǔn)化體系
- 快捷smt全自動物料倉儲方案
評論
0/150
提交評論