桂早芳
(黃岡職業(yè)技術(shù)學(xué)院,湖北,黃岡,438002)
面向?qū)ο髷?shù)據(jù)庫技術(shù)分析*
桂早芳
(黃岡職業(yè)技術(shù)學(xué)院,湖北,黃岡,438002)
面向?qū)ο蟮臄?shù)據(jù)庫是數(shù)據(jù)庫技術(shù)的發(fā)展方向,關(guān)系型數(shù)據(jù)庫已顯得力不從心。面向?qū)ο蠹夹g(shù)已經(jīng)滲透到了數(shù)據(jù)庫領(lǐng)域,把面向?qū)ο蟮姆椒ê蛿?shù)據(jù)庫技術(shù)結(jié)合起來可以使數(shù)據(jù)庫系統(tǒng)的分析、設(shè)計最大程度地與人們對客觀世界的認(rèn)識相一致。面向?qū)ο髷?shù)據(jù)庫的技術(shù)機(jī)理并不高深,但它的設(shè)計思想?yún)s極有價值。
數(shù)據(jù)庫;面向?qū)ο蠹夹g(shù);設(shè)計思想
隨著應(yīng)用的日趨復(fù)雜和智能化,傳統(tǒng)的關(guān)系數(shù)據(jù)庫的缺點一點點的暴露出來,人們迫切希望產(chǎn)生一種新的數(shù)據(jù)庫解決方案來適應(yīng)這些復(fù)雜需求,而這個解決方案極有可能就是面向?qū)ο髷?shù)據(jù)庫技術(shù)。面向?qū)ο髷?shù)據(jù)庫的技術(shù)機(jī)理并不高深,但它的設(shè)計思想?yún)s極有價值。在傳統(tǒng)的關(guān)系數(shù)據(jù)庫開發(fā)中,程序員難以從復(fù)雜的SQL編程中解脫出來(盡管已經(jīng)有一些成熟的ORM技術(shù)框架,如Hibernate,但程序員仍需要做大量的數(shù)據(jù)庫代碼工作),從而也無法從實質(zhì)上提高工作效率。風(fēng)格完全不同的面向?qū)ο蠹夹g(shù)則能夠有效地改善這種狀況。
面向?qū)ο笫钱?dāng)前計算機(jī)界關(guān)注的重點,是一種新的認(rèn)知方法學(xué)。它是一種支持模塊化設(shè)計和程序重用的編程方法,把程序間的邏輯活動建立在對象間的消息傳遞之上,且設(shè)計上更加符合現(xiàn)實世界,更加自然,所以面向?qū)ο蠓椒ǖ玫搅烁鼮閺V泛的應(yīng)用。
面向?qū)ο髷?shù)據(jù)庫系統(tǒng)是為了滿足新的數(shù)據(jù)庫應(yīng)用需要而產(chǎn)生的新一代數(shù)據(jù)庫系統(tǒng),是在現(xiàn)有關(guān)系數(shù)據(jù)庫中加入許多純面向?qū)ο蟮墓δ?。在?shù)據(jù)庫中提供面向?qū)ο蟮募夹g(shù)是為了滿足特定應(yīng)用的需要。商業(yè)應(yīng)用中對關(guān)系模型的面向?qū)ο髷U(kuò)展著重于性能優(yōu)化,處理各種環(huán)境的對象的物理表示的優(yōu)化和增加SQL模型以賦予面向?qū)ο筇卣?。隨著許多基本設(shè)計應(yīng)用(如MACD和ECAD)中的數(shù)據(jù)庫向面向?qū)ο髷?shù)據(jù)庫的過渡,面向?qū)ο笏枷胍仓饾u延伸到其它涉及復(fù)雜數(shù)據(jù)的應(yīng)用中,其中包括輔助軟件工程(CASE)、計算機(jī)輔助印刷(CAP)和材料需求計劃(MRP)。這些應(yīng)用如同設(shè)計應(yīng)用一樣在程序設(shè)計方面和數(shù)據(jù)類型方面都是數(shù)據(jù)密集型的,它們需要識別于類型關(guān)系的存儲技術(shù),并能對相近數(shù)據(jù)備份進(jìn)行調(diào)整。
還有許多應(yīng)用要求多媒體數(shù)據(jù)庫。它們要求以集成方式和文本或圖形信息一起處理關(guān)系數(shù)據(jù),這些應(yīng)用包括高級辦公室系統(tǒng)的其它文檔管理系統(tǒng),這都要用到面向?qū)ο蠹夹g(shù)。
將面向?qū)ο蠹夹g(shù)應(yīng)用到關(guān)系數(shù)據(jù)庫中可以有兩種實現(xiàn)方法:
一種方法是把面向?qū)ο蠹夹g(shù)中的對象作為關(guān)系數(shù)據(jù)庫系統(tǒng)中的一種新的數(shù)據(jù)模型。關(guān)系表中的屬性值包含對象指針,對象數(shù)據(jù)的操作在關(guān)系數(shù)據(jù)庫之外進(jìn)行。把面向?qū)ο髷?shù)據(jù)模型(ODM)和關(guān)系數(shù)據(jù)模型(RDM)結(jié)合起來,對關(guān)系數(shù)據(jù)庫管理系統(tǒng)進(jìn)行擴(kuò)充,但對象查詢功能受到一定的限制。
另一種方法是把面向?qū)ο蠼涌谔砑拥疥P(guān)系數(shù)據(jù)庫中。在關(guān)系數(shù)據(jù)庫系統(tǒng)中增加一個對象至關(guān)系轉(zhuǎn)換器,將上層的面向?qū)ο竽J睫D(zhuǎn)化為關(guān)系存儲模式,存放到關(guān)系數(shù)據(jù)庫中。面向?qū)ο蠹夹g(shù)通過映射接口和關(guān)系數(shù)據(jù)庫相結(jié)合,設(shè)計這種類型的數(shù)據(jù)庫需要理解對象到關(guān)系數(shù)據(jù)庫表的映射方法。這種映射方法通過將對象類生成為SQL語言中的數(shù)據(jù)定義語言(DDL)來將對象轉(zhuǎn)換成一個好的概念層的數(shù)據(jù)模型(DDL)[1]。這種實現(xiàn)方式使得數(shù)據(jù)庫管理系統(tǒng)在實現(xiàn)關(guān)系模型和面向?qū)ο竽P椭g的模型轉(zhuǎn)換時需要一定的開銷,執(zhí)行效率比直接面向?qū)ο髷?shù)據(jù)庫要低一些,但這種擴(kuò)充方式實現(xiàn)比較容易。
面向?qū)ο髷?shù)據(jù)庫從面向程序設(shè)計語言的擴(kuò)充著手使之成為基于面向?qū)ο蟪绦蛟O(shè)計語言的面向?qū)ο髷?shù)據(jù)庫。例如:ONTOS、ORION等,它們均是C++的擴(kuò)充,熟悉C++的人均能很方便地掌握并使用這類系統(tǒng)。
面向?qū)ο髷?shù)據(jù)庫是數(shù)據(jù)庫技術(shù)與面向?qū)ο蟪绦蛟O(shè)計方法相結(jié)合的產(chǎn)物,由于同是面向?qū)ο蠓椒▽W(xué),所以其具有了所有面向?qū)ο蟮膬?yōu)點。同時,由于數(shù)據(jù)庫主要操作的是集合(而不是單個數(shù)據(jù)),所以其又具有自身的特點和優(yōu)點。
由于面向?qū)ο蟊旧淼挠H和性,使得人們可以使用更自然的方式來開發(fā)數(shù)據(jù)庫,而不必像關(guān)系數(shù)據(jù)庫那樣考慮到方方面面諸如規(guī)范到第幾范式等等問題,大大的提高了開發(fā)效率。同時,因為加入應(yīng)用也是面向?qū)ο蟮?將面向?qū)ο髷?shù)據(jù)庫中的對象直接映射到應(yīng)用程序的對象中,數(shù)據(jù)庫間的交互變得更加直接和方便。人們可以直接將數(shù)據(jù)庫中的信息轉(zhuǎn)換到基于面向?qū)ο蠹夹g(shù)應(yīng)用程序的對象中,而且效率更高(因為無需中間層的轉(zhuǎn)化),這樣程序員就可以徹底的從持久層復(fù)雜的開發(fā)邏輯中解放出來,投入更為重要的業(yè)務(wù)邏輯開發(fā)中,而且再也不用寫復(fù)雜的SQL語句,因為應(yīng)用中的編程和數(shù)據(jù)庫中的編程是一致的[2]。
目前,主流數(shù)據(jù)庫都提供了過程化查詢語言,但畢竟還是過程化的,它天生就不如面向?qū)ο蠓椒ǜ咝Ш唵?因此人們往往并不想使用過程化查詢語言實現(xiàn)太復(fù)雜的邏輯,因為它將導(dǎo)致開發(fā)和維護(hù)困難,提升成本。由于使用了面向?qū)ο蠓椒▽W(xué),在數(shù)據(jù)庫中編寫復(fù)雜的邏輯變得簡單了,人們可以在數(shù)據(jù)庫中加入復(fù)雜的邏輯,而且可以和在應(yīng)用中添加的邏輯相互銜接。這不僅使得程序的開發(fā)和維護(hù)變得簡單,而且執(zhí)行性能也得到了提升(因為在數(shù)據(jù)中實現(xiàn)的邏輯總比在應(yīng)用中實現(xiàn)的邏輯快那么一兩步)。在數(shù)據(jù)庫中使用數(shù)據(jù)庫查詢語言實現(xiàn)復(fù)雜的基于面向?qū)ο蟮臉I(yè)務(wù)邏輯是面向?qū)ο髷?shù)據(jù)庫的一大亮點。
在關(guān)系數(shù)據(jù)庫中,低冗余和高效一直是魚和熊掌不可兼得的狀態(tài)。低冗余往往會使得查詢困難并最終導(dǎo)致數(shù)據(jù)庫效率降低(因為將產(chǎn)生可觀的笛卡爾集或者生成復(fù)雜的查詢優(yōu)化方案,從而降低效率)。而在面向?qū)ο髷?shù)據(jù)庫中,查詢將變成對對象ID和消息的傳遞(也就是方法調(diào)用),從而消除了大范圍的笛卡爾集帶來的困擾,提高數(shù)據(jù)庫的訪問效率。同時,由于面向?qū)ο蟮姆庋b性,使得面向?qū)ο髷?shù)據(jù)庫在設(shè)計程序時天生就已經(jīng)達(dá)到了相當(dāng)于關(guān)系數(shù)據(jù)庫中的第三范式的設(shè)計準(zhǔn)則。因此面向?qū)ο蟮臄?shù)據(jù)庫天生就是低冗余的。
原因很簡單,因為面向?qū)ο蟮脑O(shè)計思想本來就要求你把業(yè)務(wù)邏輯封裝到一個個對象中,并通過給它們傳遞消息調(diào)用業(yè)務(wù)邏輯計算。這樣,你就不得不首先把一些通用的業(yè)務(wù)邏輯設(shè)計在一個個類中,下次使用只需調(diào)用它們即可。同時,面向?qū)ο蠓椒ㄟ€有繼承該概念,繼承使得功能可以從一個類直接擴(kuò)展到它的子類中。另外,多態(tài),動態(tài)聯(lián)編等技術(shù)以及設(shè)計模式的應(yīng)用使得代碼的可復(fù)用性得到了最大限度的擴(kuò)展[3]。
面向?qū)ο髷?shù)據(jù)庫系統(tǒng)可以應(yīng)用于復(fù)雜的諸如人工智能等領(lǐng)域,也可以使用于傳統(tǒng)的企業(yè)級應(yīng)用??傊?面向?qū)ο髷?shù)據(jù)庫可以應(yīng)用在所有關(guān)系數(shù)據(jù)庫能夠應(yīng)用的地方,且在許多方面效能更高,比如人工智能和其他較為復(fù)雜的應(yīng)用中。面向?qū)ο髷?shù)據(jù)庫技術(shù)在計算機(jī)領(lǐng)域中的應(yīng)用主要有三種方式:
這種方式的優(yōu)點是適宜于市場推廣,缺點是無法做到純粹的面向?qū)ο笮?。這個方式已經(jīng)在各大主流數(shù)據(jù)庫總得到實現(xiàn),如Oracle、DB 2等。
這種方式是以面向?qū)ο蟪绦蛟O(shè)計語言為基礎(chǔ)的,研究持久的程序設(shè)計語言。這種方式的優(yōu)點是它是純粹的面向?qū)ο蟮?缺點是難以進(jìn)行市場推廣。
這種方式已經(jīng)有一些實現(xiàn),如法國O2 Technology公司的O2系統(tǒng)。優(yōu)缺點與第二條路線一致,基于研究的目的,本文中的面向?qū)ο髷?shù)據(jù)庫的簡易實現(xiàn)版本是以這種方式為基礎(chǔ)的。
面向?qū)ο髷?shù)據(jù)庫管理系統(tǒng)以一種面向?qū)ο笳Z言為基礎(chǔ),增加數(shù)據(jù)庫的功能,主要支持持久對象和實現(xiàn)數(shù)據(jù)共享。利用類來描述復(fù)雜對象,利用封裝方法來模擬對象行為,利用繼承性來實現(xiàn)對象的結(jié)構(gòu)和方法的重用。但是這種純粹的面向?qū)ο髷?shù)據(jù)庫管理系統(tǒng)不能支持SQL語言,不能和現(xiàn)有的數(shù)據(jù)庫結(jié)合起來,在擴(kuò)展性和通用性方面受到限制。
對象關(guān)系數(shù)據(jù)庫管理系統(tǒng)既支持SQL語句,也支持面向?qū)ο蠹夹g(shù),實現(xiàn)了傳統(tǒng)數(shù)據(jù)庫技術(shù)和面向?qū)ο蠹夹g(shù)的完美結(jié)合。全球的數(shù)據(jù)庫生產(chǎn)商爭相研發(fā)這種數(shù)據(jù)庫產(chǎn)品,數(shù)據(jù)庫生產(chǎn)商競爭的一個焦點是如何在現(xiàn)有的數(shù)據(jù)庫中加入面向?qū)ο蠹夹g(shù)。
對象關(guān)系映射數(shù)據(jù)庫系統(tǒng)是在對象層和關(guān)系層之間建立一個映射層,使得數(shù)據(jù)源中的關(guān)系數(shù)據(jù)能夠進(jìn)入對象領(lǐng)域,并且作為對象供上層應(yīng)用使用。
隨著計算機(jī)技術(shù)的飛速發(fā)展,現(xiàn)有的關(guān)系數(shù)據(jù)庫技術(shù)已不能滿足計算機(jī)網(wǎng)絡(luò)、多媒體技術(shù)、CAD/CASE等領(lǐng)域的需要,面向?qū)ο蠹夹g(shù)應(yīng)用到現(xiàn)有的數(shù)據(jù)庫中應(yīng)運(yùn)而生,面向?qū)ο蠹夹g(shù)和數(shù)據(jù)庫技術(shù)結(jié)合應(yīng)用的優(yōu)勢正日漸凸顯出來。隨著面向數(shù)據(jù)庫技術(shù)的不斷完善與日益成熟,它的應(yīng)用也必將更加廣泛,影響也必將更加深遠(yuǎn)。
[1]俠名.面向?qū)ο蠹夹g(shù)在數(shù)據(jù)庫中的實現(xiàn)[J].eNet硅谷動力 ,2008:11~78.
[2]Alex Kriegel and Boris M.Trukhnov.SQL寶典[M].北京:電子工業(yè)出版社,2003:1~200.
[3]Bruce Eckel.Thinking In Java 4th[M].北京:機(jī)械工業(yè)出版社,2006:1~600.
[4]佚名.淺談面向?qū)ο蠹夹g(shù)在數(shù)據(jù)庫領(lǐng)域中的應(yīng)用[N].eNet硅谷動力,2008:11~56.
Analysis on Object-oriented Database Technology
GUI Zao-fang
(Huanggang Polytechnic College,Huanggang,438002,Hubei)
Object-oriented database is the developing direction of the database technology.It is not efficient enough of the relational database for the complicated applications.Hopefully,Object-oriented technology has penetrated into the database field,combining the object-oriented methods with the database technology will make the analysis and design of the database system consistent in maximum to people’s understanding of the objective world.Mechanism of object-oriented database technology is not profound,but its design thought is much valuable.
Database;Object-oriented technology;Design thought
TP311.132.4
A
1672-1047(2010)01-0032-03
10.3969/j.issn.1672-1047.2010.01.10
2010-01-21
桂早芳,男,黃岡職業(yè)技術(shù)學(xué)院中專部講師。
[責(zé)任編輯:羅幼平]
黃岡職業(yè)技術(shù)學(xué)院學(xué)報2010年1期