徐萍
摘要:該文針對面向?qū)ο蟮募夹g(shù)和關(guān)系型數(shù)據(jù)庫的特點,將兩者相結(jié)合,研究了將面向?qū)ο蠹夹g(shù)方式應(yīng)用于關(guān)系型數(shù)據(jù)庫,進行系統(tǒng)設(shè)計的方法,重點描述了對象映射成關(guān)系數(shù)據(jù)庫的方法。
關(guān)鍵詞:面向?qū)ο螅魂P(guān)系型數(shù)據(jù)庫;映射;類;屬性
中圖分類號:TP311 文獻標(biāo)識碼:A 文章編號:1009-3044(2016)20-0012-02
1 引言
面向?qū)ο螅∣bject Oriented,OO)是把面向?qū)ο蟮乃枷霊?yīng)用于計算機軟件開發(fā)中,以對象為內(nèi)核,以類、繼承、封裝、多態(tài)等概念構(gòu)造系統(tǒng),進行客觀事物的軟件開發(fā)設(shè)計的一種方法。面向?qū)ο螅瑢ο笃鋵嵕褪且粋€封裝體,包含數(shù)據(jù)和控制命令。隨著計算機技術(shù)和開發(fā)軟件的不斷升級,面向?qū)ο蟮姆椒ê蛻?yīng)用已經(jīng)不僅僅局限于軟件開發(fā)和程序設(shè)計,已經(jīng)逐漸擴展到數(shù)據(jù)庫系統(tǒng)、分布式系統(tǒng)、網(wǎng)絡(luò)管理、人機交互等計算機領(lǐng)域,甚至對人工智能、計算機輔助工具、信息系統(tǒng)等產(chǎn)生深遠(yuǎn)影響。計算機和網(wǎng)絡(luò)都離不開數(shù)據(jù)庫,面向?qū)ο蟮膹V泛應(yīng)用,也給數(shù)據(jù)庫技術(shù)增添了新鮮血液。面向?qū)ο蠓椒ㄅc數(shù)據(jù)庫技術(shù),尤其是關(guān)系型數(shù)據(jù)庫如何有效結(jié)合,更好的支持?jǐn)?shù)據(jù)庫的應(yīng)用,是一個非常值得研究的課題。
2 面向?qū)ο蟮年P(guān)系型數(shù)據(jù)庫
2.1 關(guān)系型數(shù)據(jù)庫
電子商務(wù)、云存儲、云計算等計算機信息系統(tǒng),已經(jīng)是當(dāng)今信息技術(shù)的重要手段,而數(shù)據(jù)庫技術(shù)是計算機系統(tǒng)的重要組成部分和核心內(nèi)容。數(shù)據(jù)庫類型有網(wǎng)狀、層次和關(guān)系幾類,其中關(guān)系型數(shù)據(jù)庫以其集合的操作方式得到了最為廣泛的應(yīng)用。關(guān)系型數(shù)據(jù)庫是一種建立在關(guān)系數(shù)據(jù)庫模型基礎(chǔ)上的數(shù)據(jù)庫,用集合代數(shù)方法對數(shù)據(jù)庫單元中數(shù)據(jù)進行處理,是一組相互之間有關(guān)聯(lián)關(guān)系的表,表的關(guān)系通過相關(guān)字段進行關(guān)聯(lián),表中的數(shù)據(jù)可以根據(jù)需求情況進行存取且不用重新組織數(shù)據(jù)庫表格。新建一個關(guān)系型數(shù)據(jù)庫時,每一行包含一個數(shù)據(jù)實體,是被列定義的種類。目前應(yīng)用較多的數(shù)據(jù)庫有oracle、sqlserver、mysql等。
2.2面向?qū)ο蠓治龇?/p>
面向?qū)ο蠓治龇ǎ∣bject-Oriented Analysis,OOA),是指一個軟件開發(fā)項目在開發(fā)過程中,首先要對業(yè)務(wù)情況進行調(diào)研,然后用面向?qū)ο蟮乃枷雽υ擁椖繕I(yè)務(wù)進行歸納、分類、分析。OOA強調(diào)的是業(yè)務(wù)對象之間的關(guān)系以及對象的屬性和行為。面向?qū)ο蠓治龇ㄊ褂脩艉驮O(shè)計者之間的溝通更容易,設(shè)計者能夠更好地理解用戶的需求,設(shè)計者了解了用戶的需求,才能更好地設(shè)計出用戶與數(shù)據(jù)庫之間的映射方式,從而設(shè)計出用戶滿意的數(shù)據(jù)庫。
OOA方法的程序設(shè)計,從結(jié)構(gòu)框架來說,一個是針對開發(fā)者的外部層,外部層是應(yīng)用程序的整體設(shè)計;內(nèi)部層針對物理存儲,稱為物化視圖,是基于遠(yuǎn)程表格的,也可以稱之為快照;概念層介于外部層和內(nèi)部層之間,是內(nèi)外部的映射,用DDL表示,概念層是關(guān)系型數(shù)據(jù)庫的真正表現(xiàn)形式。對象與關(guān)系型數(shù)據(jù)庫通過映射發(fā)生關(guān)系,映射方法就是將關(guān)系型數(shù)據(jù)庫進行概念層的設(shè)計。從對象到關(guān)系型數(shù)據(jù)庫的映射內(nèi)容包括:屬性與列的映射,關(guān)系型數(shù)據(jù)庫中的繼承,類與表的映射,映射的關(guān)聯(lián),聚合和組合以及實現(xiàn)關(guān)系等。
將對象建模和映射的過程就是將對象轉(zhuǎn)換成概念層的數(shù)據(jù)庫模型,對象模型轉(zhuǎn)換為關(guān)系型數(shù)據(jù)庫的映射有如下關(guān)系:
1)每個對象是唯一的,有唯一的標(biāo)識符,具有唯一性。對象的標(biāo)識一般用主鍵或者是系統(tǒng)自動生成的偽標(biāo)識符來標(biāo)識,而不是通過描述對象的屬性來標(biāo)識。
2)類與關(guān)系型數(shù)據(jù)庫中的表的轉(zhuǎn)換,可以通過直接調(diào)用表的名稱,或者可以通過在類的名稱前加前綴的方式修改成表的名稱來實現(xiàn)。
3 基于面向?qū)ο蠹夹g(shù)的關(guān)系數(shù)據(jù)庫的設(shè)計方法
3.1 整體思路
基于面向?qū)ο蠹夹g(shù)的關(guān)系型數(shù)據(jù)庫的設(shè)計方法,首先要確定應(yīng)用程序中的領(lǐng)域類,領(lǐng)域類中將數(shù)據(jù)信息和對數(shù)據(jù)的操作、調(diào)用方法進行了封裝。領(lǐng)域類實例化,就得到對象,因此,需要提前把對象的存儲、地址、檢索方法、調(diào)用方法等問題設(shè)計好,做好準(zhǔn)備工作。
在面向?qū)ο蟮年P(guān)系型數(shù)據(jù)庫中,數(shù)據(jù)通過對象形式存儲到數(shù)據(jù)庫中,并且對象之間的關(guān)聯(lián)關(guān)系是自動存儲的。關(guān)系型數(shù)據(jù)庫本身不存在集合和分解的問題,可以由與對象相關(guān)的狀態(tài)圖像構(gòu)成。面向?qū)ο蟮年P(guān)系型數(shù)據(jù)庫是通過對對象進行查詢、檢索、調(diào)用的,不存在對某個表的一行或一列進行某些操作。因此需要提前定義對對象的各種操作方法。比如:writeObject()是一個寫入并存儲一個對象及所有對象相關(guān);read Object()是讀取一個對象及所有對象相關(guān)。每個對象有唯一的標(biāo)識ID,在寫入和讀取時通過唯一的標(biāo)識ID進行。
以消費者對電子賬戶的寫入、讀取操作為例子,來說明面向?qū)ο髷?shù)據(jù)庫數(shù)據(jù)存儲模式,如圖1所示。將消費者對電子賬戶的操作對象的屬性描繪成字段,指向其他對象需要映射到相應(yīng)的外部關(guān)鍵字上,此處的操作動作不能封裝。數(shù)據(jù)庫中的每一個表對應(yīng)一個類,對數(shù)據(jù)庫中的表的操作設(shè)定為函數(shù)。
3.2 對象映射成關(guān)系數(shù)據(jù)庫
RDBMS的表都是二維表,一個二維表是一個管理單元,二維表及表與表之間的關(guān)聯(lián)關(guān)系用來描述對象模型的屬性,即對象模型與關(guān)系型數(shù)據(jù)庫的映射關(guān)系。將每個對象的類存儲到數(shù)據(jù)庫的表中,一個類對應(yīng)一個對象實例,并進行存儲。不僅對象實例映射到關(guān)系型數(shù)據(jù)庫中,對象之間的關(guān)聯(lián)關(guān)系也要映射到關(guān)系型數(shù)據(jù)庫中,這樣才能進行后續(xù)的操作。
對象之間的關(guān)系有四種:關(guān)聯(lián)、繼承、聚合、組成。關(guān)聯(lián)是關(guān)系型數(shù)據(jù)庫中對象之間的關(guān)聯(lián)關(guān)系,聚合不僅需要對關(guān)系型數(shù)據(jù)庫的整體進行操作,還需要對部分進行操作,即讀取時需要整體讀取的同時也需要在部分?jǐn)?shù)據(jù)中進行讀取。關(guān)聯(lián)是不需要的,在關(guān)聯(lián)中存儲和讀取的執(zhí)行操作不明顯。關(guān)聯(lián)和聚合的區(qū)別在于對象之間的聯(lián)系程度不同。
對關(guān)系型數(shù)據(jù)庫中的數(shù)據(jù)不但有存儲、調(diào)用等動作,還有刪除的動作,那么將數(shù)據(jù)庫對對象的存儲和刪除也是一樣,對象映射成關(guān)系型數(shù)據(jù)由一些規(guī)則,如下:
1)一個類與一個庫表對應(yīng)映射,也可以多個類與一個庫表對應(yīng)映射。
2)類中存在父子關(guān)系的類,映射關(guān)系時可以分別與父和子類分別映射,或者不對父類進行定義,讓子類具有父類的屬性;不對子類進行定義,讓父類具有子類的屬性。
3)映射關(guān)系定義為一個表,包含一對一、一對多、多對多等關(guān)聯(lián)關(guān)系,也可在類表之間定義外鍵。
4)聚合的方式有兩種:一種是用一張表將所有對象類的屬性合并;一種是分別用兩張表分別將對象類的整體和部分分別合并,利用外鍵關(guān)聯(lián)整體與部分的關(guān)系。
5)有些類是沒有屬性的,沒有屬性則沒有映射表。
6)映射后的關(guān)系型數(shù)據(jù)庫表需要進行冗余操作,使其關(guān)系范式合理。
4 結(jié)論
面向?qū)ο蟮年P(guān)系型數(shù)據(jù)庫系統(tǒng)以其模型簡單、數(shù)據(jù)獨立的優(yōu)勢,成為數(shù)據(jù)庫技術(shù)發(fā)展的主流方向,本文針對面向?qū)ο蟮募夹g(shù)和關(guān)系型數(shù)據(jù)庫的特點,將兩者相結(jié)合,研究了將面向?qū)ο蠹夹g(shù)方式應(yīng)用于關(guān)系型數(shù)據(jù)庫,進行系統(tǒng)設(shè)計方法的研究,重點描述了對象映射成關(guān)系數(shù)據(jù)庫的方法。
參考文獻:
[1] 楊玉芬,李明明.高曉旸對象管理在面向?qū)ο髷?shù)據(jù)庫中的應(yīng)用研究[J].吉林大學(xué)學(xué)報(信息科學(xué)版),2013,9(5):548-553.
[2] 肖剛.面向?qū)ο髷?shù)據(jù)庫在教學(xué)信息管理系統(tǒng)中的應(yīng)用[J].硅谷,2012(6):79.
[3] 陸登,李善平,鄭春昭. 基于對象數(shù)據(jù)庫的擴展Java集合框架[J].計算機應(yīng)用與軟件,2011(1):133-136.
[3] 陳文宇.面向?qū)ο蟮年P(guān)系數(shù)據(jù)庫設(shè)計[J].電子科技大學(xué)學(xué)報,2002(1):53-56.
[4] 吳鴻雁,劉思源.基于OO技術(shù)的關(guān)系數(shù)據(jù)庫設(shè)計[J].計算機工程,2003,29(18):177-179.