面向?qū)ο髷?shù)據(jù)庫_第1頁
面向?qū)ο髷?shù)據(jù)庫_第2頁
面向?qū)ο髷?shù)據(jù)庫_第3頁
面向?qū)ο髷?shù)據(jù)庫_第4頁
面向?qū)ο髷?shù)據(jù)庫_第5頁
已閱讀5頁,還剩36頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、Silberschatz, Korth and Sudarshan8.1Database System Conceptsn對復(fù)雜數(shù)據(jù)類型的需求n面向?qū)ο髷?shù)據(jù)模型n面向?qū)ο笳Z言n持久性程序設(shè)計語言n持久性C+ 系統(tǒng)Silberschatz, Korth and Sudarshan8.2Database System Conceptsn數(shù)據(jù)處理中的傳統(tǒng)數(shù)據(jù)庫應(yīng)用具有簡單數(shù)據(jù)類型相對較少的數(shù)據(jù)類型, 第一范式成立n近年來復(fù)雜數(shù)據(jù)類型越來越重要例如: 地址可處理為單個字符串, 或者為每個子部分用一單獨的屬性, 或者復(fù)合屬性 (不屬于第一范式)例如: 允許直接存儲多值屬性而不是創(chuàng)建單獨的第一范式關(guān)系存儲

2、通常更方便n應(yīng)用CAD, CASE多媒體與圖像數(shù)據(jù)庫, 文檔/超文本數(shù)據(jù)庫Silberschatz, Korth and Sudarshan8.3Database System Conceptsn對象對象大體上對應(yīng)于E-R模型中的實體.n面向?qū)ο笫腔趯⑴c一對象有關(guān)的代碼與數(shù)據(jù)封裝成一個單位的思想.n面向?qū)ο髷?shù)據(jù)模型是一個邏輯數(shù)據(jù)模型 (類似E-R模型).n使面向?qū)ο蟪绦蛟O(shè)計風(fēng)格(e.g., Smalltalk, C+)適應(yīng)數(shù)據(jù)庫系統(tǒng)Silberschatz, Korth and Sudarshan8.4Database System Conceptsn對象具有:變量集合: 包含對象的數(shù)據(jù).

3、變量值本身也是對象.消息集合: 對象對消息進(jìn)行反應(yīng); 消息可具有零, 一個或多個參數(shù).方法集合: 實現(xiàn)消息的代碼體; 方法返回一個值作為對消息的反應(yīng)n數(shù)據(jù)的物理表示僅對對象的實現(xiàn)者可見n消息與反應(yīng)提供了對象的唯一的外部界面.n消息這個詞不必意味著物理上的消息傳遞. 消息可以實現(xiàn)為過程調(diào)用.Silberschatz, Korth and Sudarshan8.5Database System Conceptsn方法是用通用語言寫的程序, 具有下列特性變量僅在對象本身內(nèi)部可以直接引用其他對象的數(shù)據(jù)只能通過發(fā)送消息引用.n方法分為read-only 和 update 方法只讀方法不改變對象的值n嚴(yán)格

4、地說, 實體的每個屬性都必須表示為一個變量和兩個方法, 一個用于讀屬性, 另一個用于更新例如, 屬性 address 可用變量 address 與兩條消息get-address 和 set-address表示為方便起見, 許多面向?qū)ο髷?shù)據(jù)模型都允許直接存取其他對象的變量.Silberschatz, Korth and Sudarshan8.6Database System Conceptsn相似對象組成類類; 每個對象稱為它的類的實例實例n一個類中所有對象具有相同的具有相同類型的變量, 消息接口方法賦給變量的值可能不同n例如: 所有人對象組成 person 類n類與E-R模型中的實體集相似Si

5、lberschatz, Korth and Sudarshan8.7Database System Conceptsclass employee /*Variables */string name;string address;date start-date;int salary; /* Messages */int annual-salary();string get-name();string get-address();int set-address(string new-address);int employment-length();n在嚴(yán)格的封裝中還需要用來讀與設(shè)置其他變量的值的方

6、法n方法單獨定義如: int employment-length() return today() start-date; int set-address(string new-address) address = new-address;Silberschatz, Korth and Sudarshan8.8Database System Conceptsn例如, 銀行客戶類與銀行雇員類相似, 盡管有不同之處兩者可以共享某些變量和消息, 如 name 與address. 兩者也各有特殊變量和消息, 如雇員的salary 和客戶的credit-rating.n每個雇員是人; 所以employe

7、e 是person 的特例n同樣, customer 也是person 的特例.n創(chuàng)建類 person, employee and customer對所有人都適用的變量/消息與類person關(guān)聯(lián).雇員所特有的變量/消息與類employee關(guān)聯(lián)客戶所特有的變量/消息與類customer 關(guān)聯(lián)Silberschatz, Korth and Sudarshan8.9Database System Conceptsn類組織成一個特化 / IS-A 層次屬于類person的變量/消息被類employee 和customer繼承結(jié)果構(gòu)成一個類層次注意與E-R模型中的ISA層次的相似性Silberschat

8、z, Korth and Sudarshan8.10Database System Conceptsclass personstringname;stringaddress:;class customer isa person int credit-rating;class employee isa person date start-date;int salary;class officer isa employee int office-number,int expense-account-number,; .Silberschatz, Korth and Sudarshan8.11Dat

9、abase System Conceptsn類officer 的對象的完整變量列表:office-number, expense-account-number: 局部定義start-date, salary: 從employee 繼承name, address: 從person 繼承n同變量一樣還繼承方法.n可替換性可替換性 類的任何方法可以對屬于其子類的任何對象調(diào)用.n類類外延外延(extent): 類中所有對象的集合. 兩種選擇:1. 類employee 的外延包含所有officer, teller 和secretary 對象.2.類employee 的外延僅包含不屬于子類officer,

10、 teller 或secretary的雇員對象H這是OO系統(tǒng)通常的做法H可訪問子類的外延求所有子類對象Silberschatz, Korth and Sudarshan8.12Database System Concepts銀行例的類DAGSilberschatz, Korth and Sudarshan8.13Database System Conceptsn多重繼承使一個類可有多個超類.類/子類聯(lián)系可表示為有向無圈圖(DAG) 當(dāng)對象有多種相互獨立的分類方式時尤其有用E.g. 臨時/永久獨立于Officer/secretary/teller為每一種子類組合創(chuàng)建一個子類 不必為數(shù)據(jù)庫中不可能

11、出現(xiàn)的子類組合創(chuàng)建子類n類從它的所有超類繼承變量和方法n存在歧義的可能: 當(dāng)從兩個超類A和B繼承同名變量/消息N時若該變量/消息是在共享的超類中定義的則沒有問題否則, 采用如下方法之一 標(biāo)志為出錯, 重命名變量 (A.N 和B.N)選擇其一.Silberschatz, Korth and Sudarshan8.14Database System Conceptsn一個對象可以同時屬于多個子類一個person 可以具有student, teacher 或footballPlayer 等角色, 或者任何組合 例如, 踢足球的學(xué)生助教n可用多重繼承建模對象的 “角色”即, 允許對象具有多個類型n但許

12、多系統(tǒng)堅持對象必須具有最具體類最具體類即, 若某對象屬于多個類, 則必須存在這些類的一個共同子類創(chuàng)建子類student-teacher 與student-teacher-footballPlayer當(dāng)有許多可能的組合時, 為每種組合創(chuàng)建子類會很麻煩Silberschatz, Korth and Sudarshan8.15Database System Conceptsn即使某些或全部變量的值或方法定義隨時間改變, 對象仍保持其身份.n對象標(biāo)識是一個比非面向?qū)ο蟮某绦蛘Z言或數(shù)據(jù)模型中對應(yīng)概念更強(qiáng)的標(biāo)識概念.值 數(shù)據(jù)值; 例如關(guān)系系統(tǒng)中所用的主鍵值.名 由用戶提供; 用于過程中的變量.內(nèi)建 數(shù)據(jù)模

13、型或程序語言內(nèi)建的標(biāo)識.不需用戶提供標(biāo)識. 面向?qū)ο笙到y(tǒng)采用的標(biāo)識形式.Silberschatz, Korth and Sudarshan8.16Database System Conceptsn對象標(biāo)識對象標(biāo)識用于唯一標(biāo)識對象對象標(biāo)識是唯一的: 沒有兩個對象具有相同的標(biāo)識每個對象只有一個標(biāo)識例如, person對象的spouse 字段可以是另一個person對象的標(biāo)識.可保存為一對象的字段, 用來引用另一對象.可以是系統(tǒng)生成的 (由數(shù)據(jù)庫創(chuàng)建), 或 外部的 (如社會安全號)系統(tǒng)生成的標(biāo)識:更易用, 但不能跨數(shù)據(jù)庫系統(tǒng)使用如果已存在唯一標(biāo)識則冗余Silberschatz, Korth and

14、 Sudarshan8.17Database System Conceptsn設(shè)計中的每個部件可以包含其他部件n可建模為對象包含. 包含其他對象的對象稱為復(fù)合對象.n多層次的包含形成了包含層次包含層次連線解釋為is-part-of, 而非 is-a.n允許數(shù)據(jù)被不同用戶在不同粒度上觀察.Silberschatz, Korth and Sudarshan8.18Database System Conceptsn面向?qū)ο蟾拍钤跀?shù)據(jù)庫系統(tǒng)中有多種用法面向?qū)ο罂杀挥米髟O(shè)計工具H類似于用E-R圖建模再轉(zhuǎn)換成關(guān)系面向?qū)ο蟾拍羁膳c操作數(shù)據(jù)庫的程序設(shè)計語言結(jié)合.對象關(guān)系系統(tǒng)對象關(guān)系系統(tǒng) 在關(guān)系語言中增加復(fù)雜類

15、型和面向?qū)ο?持久性程序設(shè)計語言持久性程序設(shè)計語言 通過增加持久性和集合之類的概念來擴(kuò)展面向?qū)ο蟪绦蛟O(shè)計語言以便處理數(shù)據(jù)庫. Silberschatz, Korth and Sudarshan8.19Database System Conceptsn持久性程序設(shè)計語言允許創(chuàng)建對象并存儲在數(shù)據(jù)庫中, 并且可在程序設(shè)計語言中直接使用允許從程序設(shè)計語言直接操作數(shù)據(jù)不必通過SQL.不必有顯式的格式(類型)改變格式改變由系統(tǒng)透明地完成若沒有持久性程序設(shè)計語言, 格式改變成為程序員的負(fù)擔(dān) 要寫更多的代碼 更多的出錯機(jī)會允許對象在內(nèi)存中處理 不必有顯式的從數(shù)據(jù)庫加載或存儲到數(shù)據(jù)庫 節(jié)省代碼, 節(jié)省加載/存儲

16、大量數(shù)據(jù)的開銷Silberschatz, Korth and Sudarshan8.20Database System Conceptsn持久性程序設(shè)計語言的缺點由于多數(shù)程序設(shè)計語言的表達(dá)能力, 很容易造成編程錯誤而破壞數(shù)據(jù)庫.語言的復(fù)雜性使得自動的高級優(yōu)化更加困難.不支持描述性查詢和關(guān)系數(shù)據(jù)庫Silberschatz, Korth and Sudarshan8.21Database System Conceptsn使臨時對象持久化的途徑類持久 聲明某個類的所有對象是持久的; 簡單但不靈活.創(chuàng)建持久 擴(kuò)展創(chuàng)建對象的語法以聲明對象是持久的.標(biāo)記持久 在程序中止之前將對象標(biāo)記為持久的.可達(dá)性持久

17、聲明 (根) 持久對象; 被根對象直接或間接引用的對象也是持久的. 對程序員更容易, 但對數(shù)據(jù)庫系統(tǒng)有更多開銷類似Java中的垃圾收集, 要檢查可達(dá)性Silberschatz, Korth and Sudarshan8.22Database System Conceptsn持久對象被賦予持久的對象標(biāo)識.n標(biāo)識的永久程度:過程內(nèi) 標(biāo)識僅在單個過程執(zhí)行期間持續(xù)程序內(nèi) 標(biāo)識僅在單個程序或查詢執(zhí)行期間持續(xù).程序間 標(biāo)識在多個程序的執(zhí)行之間持續(xù), 但隨存儲組織改變而改變持久的 標(biāo)識在程序執(zhí)行之間和數(shù)據(jù)的結(jié)構(gòu)重組之間持久; 這是面向?qū)ο笙到y(tǒng)要求的.Silberschatz, Korth and Sudar

18、shan8.23Database System Conceptsn在O-O語言(如C+)中, 對象標(biāo)識實際上是內(nèi)存指針.n持久性指針 在程序執(zhí)行之間持久可看作是指向數(shù)據(jù)庫內(nèi)對象的指針E.g. 指明文件標(biāo)識和文件內(nèi)偏移Silberschatz, Korth and Sudarshan8.24Database System Conceptsn命名對象(同命名文件一樣) 不能用于大量對象.通常只對類外延及其他對象集合命名, 而非對象.n暴露對象標(biāo)識或指向?qū)ο蟮某志弥羔樋稍谕獠勘4?所有對象都有對象標(biāo)識n存儲對象集合, 并允許程序在該集合上迭代以找到所需對象將對象集合建模為匯集類型匯集類型類外延類外延

19、 屬于類的所有對象的集合; 通常為具有持久對象的類維護(hù)外延.如何在數(shù)據(jù)庫中找到對象:Silberschatz, Korth and Sudarshan8.25Database System ConceptsnC+ 語言允許增加對持久性的支持而不修改語言聲明一個類 Persistent_Object 來支持持久性重載重載 在新類型中重定義標(biāo)準(zhǔn)函數(shù)名及運算符(如 +, , 指針去引用運算)的能力模板類模板類有助于構(gòu)建一個類型安全的支持匯集和持久類型的類型系統(tǒng).n不必擴(kuò)展C+ 語言而提供對持久性的支持: 相對容易實現(xiàn)但難以使用n與避免改變語言的系統(tǒng)一樣, 向C+語言增加新特性的持久性C+ 系統(tǒng)已被構(gòu)

20、建Silberschatz, Korth and Sudarshan8.26Database System ConceptsnObject Database Management Group 是一致力于標(biāo)準(zhǔn)化面向?qū)ο髷?shù)據(jù)庫的工業(yè)協(xié)會尤其是持久性程序設(shè)計語言包括C+, Smalltalk 和Java 標(biāo)準(zhǔn)ODMG-93ODMG-2.0 and 3.0 (which is 2.0 plus extensions to Java)我們的描述基于ODMG-2.0nODMG C+標(biāo)準(zhǔn)避免改動C+ 語言 通過模板類和類庫提供功能Silberschatz, Korth and Sudarshan8.27Da

21、tabase System Conceptsn模板類 d_Ref 用于聲明引用 (持久性指針)n模板類 d_Set 用于定義對象集合. 方法包括insert_element(e) 和delete_element(e) n還提供其他匯集類如 d_Bag (允許重復(fù)的集合), d_List 和 d_Varray (變長數(shù)組).n還提供許多標(biāo)準(zhǔn)類型的 d_ 版本, 如 d_Long 和 d_string對這些類型的解釋是依賴于平臺的動態(tài)分配的數(shù)據(jù)在數(shù)據(jù)庫中分配, 而非在內(nèi)存Silberschatz, Korth and Sudarshan8.28Database System Conceptscla

22、ss Branch : public d_Object .class Person : public d_Object public:d_String name; / should not use String!d_String address;class Account : public d_Object private:d_Long balance; public:d_Long number;d_Set d_Ref owners; int find_balance();int update_balance(int delta);Silberschatz, Korth and Sudarsh

23、an8.29Database System Conceptsclass Customer : public Person public:d_Date member_from;d_Long customer_id;d_Ref home_branch;d_Set d_Ref accounts; ; Silberschatz, Korth and Sudarshan8.30Database System Conceptsn類之間的聯(lián)系用引用實現(xiàn)n特定的引用類型通過增加/刪除逆鏈接來實施完整性.類型 d_Rel_Ref 是對Class的引用, 其中Class的屬性InvRef 是逆引用.類似地, d_

24、Rel_Set 用于引用的集合n類d_Rel_Ref 的賦值方法 (=) 是重載的用類型定義來自動查找及更新逆鏈接使程序員免除更新逆鏈接的任務(wù)消除不一致鏈的可能性n類似地, d_Rel_Set的insert_element() 和delete_element() 方法 利用類型定義自動查找及更新逆鏈接Silberschatz, Korth and Sudarshan8.31Database System ConceptsnE.g.extern const char _owners , _accounts ;class Account : public d.Object .d_Rel_Set o

25、wners; / . Since strings cant be used in templates const char _owners= “owners”;const char _accounts= “accounts”; Silberschatz, Korth and Sudarshan8.32Database System Conceptsn使用C+運算符的持久性版本, 如 new(db)d_Ref account = new(bank_db, “Account”) Account;new 在指定數(shù)據(jù)庫中分配對象, 而不是在內(nèi)存中.第二個參數(shù) (“Account”) 給出數(shù)據(jù)庫中用的類

26、型名.n當(dāng)去除引用運算符 - 作用于d_Ref引用時, 在繼續(xù)通常的C+去除引用之前先加載被引用對象到內(nèi)存 (如果不在內(nèi)存的話)n類的構(gòu)造子 創(chuàng)建對象時用于初始化對象的特殊方法; 對new自動調(diào)用.n在創(chuàng)建與刪除對象時類外延自動被維護(hù)僅針對說明了此特性的類通過用戶接口說明, 而非C+早期版本的ODMG不支持自動維護(hù)類外延Silberschatz, Korth and Sudarshan8.33Database System Conceptsn類 d_Database 提供方法打開數(shù)據(jù)庫: open(databasename) 命名對象: set_object_name(object, name

27、)用名查找對象: lookup_object(name)重命名對象: rename_object(oldname, newname)關(guān)閉數(shù)據(jù)庫: close()n類 d_Object 被所有持久性類繼承.提供方法分配及刪除對象更新對象之前必須調(diào)用方法mark_modified(). 創(chuàng)建對象時自動調(diào)用Silberschatz, Korth and Sudarshan8.34Database System Conceptsint create_account_owner(String name, String Address) Database bank_db.obj;Database * ba

28、nk_db= & bank_db.obj;bank_db =open(“Bank-DB”);d.Transaction Trans;Trans.begin();d_Ref account = new(bank_db) Account;d_Ref cust = new(bank_db) Customer;cust-name - name;cust-address = address;cust-accounts.insert_element(account);. Code to initialize other fieldsTmit();Silberschatz, Korth and Su

29、darshan8.35Database System Conceptsn數(shù)據(jù)庫中類外延自動維護(hù).n為存取類外延: d_Extent customerExtent(bank_db);n類 d_Extent 提供方法 d_Iterator create_iterator() 來創(chuàng)建一個類外延上的迭代子n提供select(pred) 方法以返回滿足選擇謂詞pred的對象上的迭代子.n迭代子用于遍歷集合或類外延中的對象.n匯集 (sets, lists 等) 也提供方法create_iterator().Silberschatz, Korth and Sudarshan8.36Database Sys

30、tem Conceptsint print_customers() Database bank_db_obj;Database * bank_db = &bank_db_obj;bank_db-open (“Bank-DB”);d_Transaction Trans; Trans.begin ();d_Extent all_customers(bank_db);d_Iteratord_Ref iter;iter = all_customerscreate_iterator();d_Ref p;whileiter.next (p)print_cust (p); / Function assumed to be defined elsewhereTmit();Silberschatz, Korth and Sudarshan8.37Database System Conceptsn說明性查詢語言O(shè)QL,

溫馨提示

  • 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

提交評論