簡(jiǎn)介 Oracle9 i. 已經(jīng)迅速發(fā)展成為可用于所有數(shù)據(jù)(從簡(jiǎn)單到復(fù)雜的各種類型數(shù)據(jù))的數(shù)據(jù)庫(kù)。多媒體數(shù)據(jù)類型(如圖像、地圖、視頻剪輯和音頻剪輯等)曾經(jīng)只能在專業(yè)軟件中見到?,F(xiàn)在很多基于Web 的應(yīng)用程序需要它們的數(shù)據(jù)庫(kù)服務(wù)器治理此類數(shù)據(jù)。 其他的軟件解決方案需要存儲(chǔ)涉及金融工具、設(shè)計(jì)圖表或分子結(jié)構(gòu)的數(shù)據(jù)。為了滿足這些需求,Oracle9 i. 數(shù)據(jù)庫(kù)服務(wù)器采用“對(duì)象關(guān)系技術(shù)”,為涉及復(fù)雜數(shù)據(jù)的開發(fā)、部署和治理提供簡(jiǎn)單策略。
通過使用對(duì)象關(guān)系技術(shù),開發(fā)人員可以增強(qiáng)Oracle9 i. 服務(wù)器,從而創(chuàng)建他們自己的“應(yīng)用程序域特定”的數(shù)據(jù)類型。采用類型演變功能,Oracle9 i. 已經(jīng)增強(qiáng)了支持全面的對(duì)象建模功能,包括繼續(xù)和多級(jí)集合在內(nèi)。例如,可以創(chuàng)建代表客戶、資產(chǎn)組合、照片或電話網(wǎng)絡(luò)的新數(shù)據(jù)類型,然后,確保數(shù)據(jù)庫(kù)程序可以處理與應(yīng)用程序域同樣的抽象級(jí)別。很多情況下,需要將這些新域類型與服務(wù)器盡可能緊密地集成,這樣它們便能作為內(nèi)置類型(如NUMBER 或VARCHAR)看待。使用擴(kuò)充性服務(wù)可以實(shí)現(xiàn)這一目的。采用這樣的集成方式,可以將數(shù)據(jù)庫(kù)服務(wù)器方便地?cái)U(kuò)展到新域中。
采用類型演變功能,Oracle9 i. 已經(jīng)增強(qiáng)為可以支持包括繼續(xù)和多級(jí)別集合在內(nèi)的全面的對(duì)象建模功能。
使用UML 分析和設(shè)計(jì)應(yīng)用程序后,即可使用特定編程語(yǔ)言和永久數(shù)據(jù)存儲(chǔ)將生成的對(duì)象模型映射為目標(biāo)實(shí)施。然后,可將已實(shí)施的應(yīng)用程序部署到特定目標(biāo)體系結(jié)構(gòu)。隨著該面向?qū)ο箝_發(fā)過程的進(jìn)行,Oracle9 i 對(duì)象關(guān)系技術(shù)的優(yōu)勢(shì)逐漸顯現(xiàn)出來(lái)。如下節(jié)所述,使用Oracle9 i 的“對(duì)象類型系統(tǒng)”,可以將UML 對(duì)象模型的結(jié)構(gòu)完全一對(duì)一地映射到相應(yīng)的對(duì)象關(guān)系模式中。
Oracle 的對(duì)象類型系統(tǒng) 以前,應(yīng)用程序注重訪問和修改存儲(chǔ)在由諸如INTEGER、NUMBER、DATE 和CHAR等本地SQL 數(shù)據(jù)類型組成的表中的共同數(shù)據(jù)。 在Oracle9 i 中,不但支持這些本地類型,而且也支持新的“對(duì)象”數(shù)據(jù)類型,這是最近的ANSI SQL99 標(biāo)準(zhǔn)中的新部分。本節(jié)將簡(jiǎn)介對(duì)象關(guān)系類型系統(tǒng)的基本特性。
類型層次 使用CREATE TYPE 語(yǔ)句創(chuàng)建層次的根類型,并應(yīng)將其聲明為NOT FINAL。 CREATE TYPE Person_t AS OBJECT( name VARCHAR2(100), dob DATE,
MEMBER FUNCTION age() RETURN number, MEMBER FUNCTION print() RETURN varchar2) NOT FINAL; 可在“非最終”類型下創(chuàng)建子類。它從其超類繼續(xù)所有屬性和方法。它可添加新屬性和方法,以及/或覆蓋已繼續(xù)的方法。 CREATE TYPE Employee_t UNDER Person_t( salary NUMBER, bonus NUMBER, MEMBER FUNCTION wages() RETURN number, OVERRIDING MEMBER FUNCTION print() RETURN varchar2); 在“Oracle 通用模式”中,有一個(gè)更加具體的有關(guān)類型繼續(xù)層次的示例。 如圖2 所示,Category 類及其子類采用精致而簡(jiǎn)單的結(jié)構(gòu)進(jìn)行建模,表示樹狀結(jié)構(gòu)的部分與整體間的層次。該示例進(jìn)一步展示了Oracle9 i 對(duì)象類型系統(tǒng)在保留應(yīng)用程序?qū)ο竽P偷乃蟹矫嬷械闹饕獌?yōu)點(diǎn)。 create type category_typ as object ( category_name varchar2(50) , category_description varchar2(1000) , category_id number(2) ) NOT INSTANTIABLE NOT FINAL; create type subcategory_ref_list_typ as table of ref category_typ; create type product_