物件模型的關係投影研究

才智咖 人氣:1.05W
物件模型的關係投影研究
摘要  本文在物件模型與關係模型區別的基礎上,介紹了將物件模型投影成關係模型的投影原理,並結合例項詳細論述了物件之間不同引用關係的不同投影以及繼承實體的三種不同投影方法。關鍵詞  物件導向  資料模型  關係模型  投影0 引言
     隨著我國軟體開發水平的提高,越來越多的軟體開發自覺地遵循軟體工程開發方法。在資料庫的開發中採用了很多軟體建模或資料建模工具,如Rational Rose、PowerDesigner等。這些建模工具在需求分析、系統分析以及設計,直至最終物理程式碼的生成都提供了強大的功能,帶給資料庫開發人員很大的便利。同時由於物件導向的方法能比較直觀地描述現實系統,便於建立的業務模型,便於開發過程中的交流,因此開發人員使用這些工具進行需求分析、系統分析和設計的時候,一般也都建立物件模型。
建立起來的概念上的物件模型,其物理實現可以有兩種,一種是物件資料庫,一種是關係資料庫。由於關係資料庫更加成熟,並且占主導地位,所以大多開發人員會選擇用關係資料庫來實現設計出的物件模型。這樣,在用物件模型分析與設計完成後,開發人員不得不將物件模型轉換成關係模型[1];而在此資料庫之上的資料操作也不得不改為針對關係模型,而不是概念層上的物件模型,這就使得設計與實現形成了一條鴻溝。為了填平這條鴻溝,使資料庫上層開發人員還能夠針對物件模型進行資料操作,就需要開發一個轉換層,用來遮蔽掉物件模型與關係資料庫之間的這種轉換,該層的實現就稱為物件模型的關係實現。
     物件模型的關係實現包括兩方面的:一個是模型上的轉換,稱為“模型投影”,即將物件模型轉換成關係模型;另一個是資料操作介面的轉換,即定義一個介面負責把對物件模型的操作轉換成對投影生成的關係模型的操作。本文重點介紹模型的投影方法,通過分析物件模型與關係模型的特點,提出了一套物件模型在關係型資料庫上投影的具體方案。1 投影原理分析
首先,我們比較一下物件模型和關係模型的主要概念。
     表1給出了物件模型與關係模型基本概念的對照。從中可以看出物件模型與關係模型有較大的區別,物件模型許多概念在關係模型中沒有對應的概念,即使有對應的概念在實際投影時並不能簡單地一一對應[2]。例如,一個實體並不能簡單地投影成一個關係表,因為關係模型中沒有實體之間的繼承關係,所以一個實體的定義可能被投影成多個表,也可能沒有關係表與之對應,如抽象實體。屬性也不能直接對應,當物件模型中具有複雜資料型別時,一個屬性可能被投影成多個列。
物件模型中實體之間的聯絡與關係模型中表之間的聯絡也有本質的'區別。在物件模型中實體之間聯絡使用“引用”方式在實體與實體之間建立比較緊密的耦合關係和比較的導航關係。例如,要指出某人所在單位領導的姓名,可以用這種簡潔的方式直接獲得,但在關係模型中則要通過一組複雜的表之間的關聯查詢(利用外部鍵)才能得到。
物件模型向關係模型的投影有三個關鍵要素:
(1)      物件模型的描述規範
(2)      關係模型的描述規範
(3)      物件模型向關係模型投影的規則
我們在此不從語法上來定義物件模型,只給出物件模型的主要概念。在我們的物件模型中將應用以下幾個概念:(1)實體、(2)屬性、(3)主標識、(4)物件引用、(5)例項、(6)繼承、(7)方法、(8)物件標識、(9)聚集、(10)型別定義、(11)唯一性規則、(12)Where規則。
關係模型中將應用以下幾個概念:(1)表、(2)列、(3)行、(4)主鍵、(5)外部鍵
為了按物件進行操作,需要建立一個數據字典,也稱為投影字典。投影字典由一組關係表構成,在投影字典中要儲存物件模型的完整描述。
2、基本內容的投影
基本的投影包括簡單的物件模型向關係模型的轉換。具體有以下幾種:
(1)實體  一般投影成表。但只有一個獨立的實體,既沒有超類,也沒有子類,才投影成一個表。具有繼承關係的實體投影,將在第4節中介紹。由於投影規則選擇不同,當一個實體投影成多個表時,不能保證可以用一個關係檢視來描述一個實體。
(2)屬性  對具有基本資料型別的屬性,投影成列。這需要在物件模型與關係模型的各種資料型別之間建立對應關係。基本資料型別指整型、實型、字串、日期、時間、布林。如果物件模型採用列舉型別需要在關係模型中對列進行取值範圍限定。其它複雜資料型別如聚集、結構型別則需要採用專門的處理方法。
(3)主標識、物件標識。物件標識在物件模型中並不需要明確地表示成物件的一個屬性,採用的方式是在每一個與實體對應的關係表中都增加一個列,並把該列作為主鍵,資料型別為字串,物件標識的格式為:實體名+表中唯一序列號。之所以把物件標識作為主鍵,是因為要把實體之間的引用採用以物件標識作為主鍵/外部鍵來實現的。這樣原來的主標識就不能投影成主鍵了。在有的關係資料庫中允許使用輔助鍵,如果沒有輔助建則只能對原來的主標識投影成的列加上唯一性約束規則。
(4)例項   例項不屬於模型投影的內容,但與投影的操作有密切關係。如果一個實體投影成多個表,則一個例項將由多個關係表的行構成。這些行必須具有相同的物件標識。
(5)聚集  如果聚集的元素型別是基本資料型別,可以考慮投影成二進位制型別。如果元素型別是實體型別,這實際上構成了該實體與元素所指向實體之間多對多的引用關係,具體可參照第3節。
(6)型別定義  主要指自定義結構型別,需要將結構的域投影成單個的列。
(7)唯一性規則。轉換為關係表的唯一性約束規則,當唯一性規則中包括的屬性投影成多列時,注意要將多個列均包括在關係表的唯一性約束定義中。
(8)Where規則  轉換成關係表的條件約束規則。
(9)名字轉換規則  實體名轉換成表名,屬性名轉換為列名,資料型別的域展開為列時,需要有一套名字轉換規則。
3、物件之間引用關係的投影[3]
如果從純粹的建模技術角度來看,物件之間的關係有以下幾種:
      一對多關係
      多對多關係
      一對一關係
不管是哪一種關係在概念模型中都兩種情況,一種是依賴的,一種是獨立的。
為了方便敘述,我們定義了一個簡單的物件模型,圖2是該模型的實體關係圖(也稱為類圖),圖中的各實體只列出了主標識中的屬性。圖中分別用不同的符號給出了繼承關係、多對多關係、依賴的一對多關係和獨立的一對多關係。
具體說明如下:實體Student和Teacher是Person的子類,繼承關係用一個三角形表示。一個系(Department)裡有多個人(學生或老師),兩個實體間用實線連線表示引用關係,實心圓圈表示多的一端。一個系可以開設多門課(Course),一門課是依賴於系的,這就是說只知道課程名還不能確定這門課,還需要知道是哪個系開設的這門課。同樣是方法課,數學系開設的和計算機系開設的在難度上和內容上會有很大區別。用箭頭表示依賴。一門課有多個學生選修,一個學生可以選修多門課程。 

實體間不同的關係進行投影是不同的。
(1)獨立的引用關係進行投影,需要在“多”的一邊要產生一個外部鍵。如果實體Person投影對應的表是T_Person,則表T_Person中要自動增加一個屬性DptName,作為外部鍵,對應實體Department投影成的表T_Department的主鍵DptName。如果在繼承關係中Person要分解到多個子類表中,則這些子類表中都要生成這個對實體Department引用的外部鍵
(2)依賴的引用關係進行投影,不僅需要在“多”的一邊產生一個外部鍵,而且還要把該外部鍵做為輔助鍵。例如實體Course投影成表T_Course時,不僅要生產一個外部鍵DptName,而且它的輔助鍵由兩個列組成:DptName和CourseName。注意,根據第2節物件標識的投影規則,表T_Course的主鍵是物件標識列。
(3)實體之間多對多的關係進行投影,需要新建一個“交叉表”,該表專門記錄實體間多對多的這種聯絡,原來的兩個實體表與新建的交叉表之間的關係是一對多的關係,這實際上把多對多關係變成兩個一對多關係。實體Cource和Student之間的多對多關係投影成表T_Course_Student,它有兩個列一個是Course_ID,一個是Student_ID,都是外部鍵,分別用來對錶T_Course或T_Student進行引用。
4 繼承關係的投影
繼承關係的投影是模型投影中的關鍵,對該問題的不同解決方案會到整個模型投影的設計。一般來講,在關係資料庫中實現繼承的方法可劃分為三類:
(1)合併法。合併法就是將整個類層次對映為單個關係表,表中儲存所有類(基類、子類)的屬性。圖2中實體Person、Student、Teacher對映成一個表T_Person。如圖3所示,表中增加了一個屬性PersonID,由於物件標識的格式是實體名+唯一序列值,通過它的字首可以區分用一個例項屬於哪一個實體。合併法實現繼承關係投影的優點是實現簡單,操作方便,缺點是會產生大量的資料冗餘。
(2)分解法  分解法就是將每個具體子類對映成單個關係表,超類的屬性將複製到各子類中。子類對應的關係表包括自身的屬性和繼承的屬性,每個具體的子類包含各自的物件標識。抽象的基類不參與對映。其中,Person由於是抽象類,未對映成資料庫表;而Student、Teacher對映為相應的表,它們具有各自的主鍵。如圖4所示。
     分解法的表中包含了具體子類的所有資訊,操作實現簡單,但超類的修改會導致相對應的表及其子類所對應表的更改,這會增加保持資料的完整性的複雜性。
(3)單表法  單表法為每一個類建立資料庫表,表中包含特定於該類的屬性和物件標識。圖5所示,注意personID作為所有表的主鍵,它們之間是is-a的關係。
單表法與物件導向的概念具有一致性,支援多型,易於修改基類和增加新的類。但資料庫中存在大量的關係表,加上表之間的關聯較多,會降低資料訪問效率。
以上三種方法各有優缺點,沒有一種是絕對完美的。因此,資料庫設計人員要根據模型的具體情況選擇繼承的投影方法。
5      結束語
本文介紹的物件模型的關係投影原理已經用於多個專案的物件資料平臺的開發上,簡潔實用。由於物件模型到為止還沒有統一的標準,因此物件模型向關係模型的投影規則要根據實際模型的定義來制定。在實際的投影規則定義中,名字的轉換規則、聚集的處理方式、物件之間的引用關係、繼承處理方式可以根據需要確定下來,也可以設計成多種方式並存,建立可控制的投影,這需要設計一整套投影規則元模型。建立一套可描述物件模型、關係模型、投影規則的形式語言規則和語法規則在上和上具有重要意義,這也是我們目前正在的重點。

TAGS:模型 投影