現實世界中大量的數據都具有層次結構,常見的例子包括組織機構序列(如公司機構、部隊編制、作戰編成)、分類體系(如中圖分類法、裝備體系)、家族譜系等等。因此,層次結構數據的管理,在軟件開發過程當中經常會遇到,是個具有共性的問題。
數據管理是指如何對數據進行分類、組織、編碼、存儲、檢索、控制和維護,是數據處理的中心問題。關系數據庫管理系統通過索引、查詢優化、事務處理、並發訪問控制、觸發器、錯誤恢復等強大的機制,有效地確保了海量數據存取的高效性,保證了數據的完整性和一致性,並提供了數據的可靠性和安全性,從而具有其它數據管理方式無法比擬的優勢。因此,在企業計算的環境下,對於數據管理,尤其是對於大規模商業數據的管理,關系數據庫占據著主導地位。當前,大量的大型信息系統都是建立在關系數據庫平台之上的。然而,在管理層次結構的數據,以及日益普遍的半結構化、非結構化數據方面,關系模型也暴露出了一些固有的不足。
關系模型在管理層次結構數據上的不足
關系數據庫的理論基礎是關系理論,它的數據模型是關系模型。在用戶看來,一個關系模型的邏輯結構是一張規則的二維表,由行和列組成。隨著新的計算機技術的不斷湧現,以及數據的分布性、異構性和半結構化特性以及非結構化特性程度的不斷加強,關系數據庫系統在數據管理上也已經顯示出了一些不足:
為此,有必要探討數據管理的新思路和新方法。XML 所具有的一些獨特的優點和功能,使得它在層次結構數據的管理方面嶄露頭角,並已經引起了多方廣泛的關注。
應用 XML 管理層次結構的數據
應用 XML 管理層次結構的數據有幾個顯著的優點:便於構建並維護數據的樹狀結構;便於保持數據的次序語義;以及便於與開發平台的樹狀控件相結合等。
XML 數據模型的特點
XML 是 W3C 制定的標准,被設計為混合語(lingua franca),以便在用戶和程序之間交換信息。它具有一系列優良特性,如可擴展性,簡單性,自描述性,結構、內容和表現分開等。因此,XML 在自由軟件以及商業軟件業界均獲得了強有力的支持,從而能夠為開發人員提供極大的靈活性。
從數據建模方面來看,XML 提供了兩種手段:DTD 和 XML Schema。它們可以使開發人員將他們的思想具體化,為成組具有相同邏輯結構的文檔(而不僅僅是單個文檔)制定規范。正是通過這兩種建模手段,XML 承諾幫助創建更加智能的文檔,如提供某種程度的查錯功能,易於從中提取出有用的信息,並將它們按照人們的需要展示出來。
XML 數據模型的優點
XML數據模型本身就是樹狀模型,一篇格式良好(well-formed)且有效的(validated)XML 文檔經過 DOM 解析之後,就會在內存當中建立一棵樹。因此,對於現實世界中數據具有的次序語義和層次結構,XML 數據模型能夠很好且方便地由XML文檔解析器予以保持,開發人員不必費什麼力氣。並且,這種次序語義和層次結構的動態維護也是比較簡單的。
此外,XML 解析器是組件,具有標准的接口,開發人員從而可以避免接口程序的重復開發和分發,以及降低相應的接口程序測試和維護開銷。
XML 與樹狀控件的結合
XML 是國際標准,樹狀控件是常用而重要的界面元素,兩者在業界均獲得了廣泛支持;而且,如前所述,XML 數據模型本身就是樹狀模型,這種結構上的內在相似性,使得兩者具有天然的良好的結合性。
由於在軟件開發過程當中經常會遇到層次結構數據的管理,為避免重復勞動和避免重新開發可能引入的錯誤,從而提高軟件開發的效率和質量,削減開發費用和縮短開發周期,筆者利用組件技術,將XML與樹狀控件相結合,綜合應用 OLE、用戶自繪制等技術,開發了一個組件,在組織機構編碼系統、任務空間概念模型(CMMS)管理系統等多個項目當中得到了復用,取得了預期效果。
該組件具有如下特點和功能:
示例
為清晰起見,清單1給出了 A 銀行組織機構序列的示例數據(XML 文檔格式):
清單1. A 銀行組織機構序列示例(XML 文檔格式)作為對比,清單2給出了 A 銀行組織機構序列的示例數據(關系模型數據格式),由此不難發現 XML 文檔格式管理層次結構數據的優越性:
清單2. A銀行組織機構序列示例(關系模型數據格式)
請注意,上表當中的"是否葉子節點"、"層次"、"上一級編碼"、"上二級編碼"、"上三級編碼"、"上四級編碼"等字段均是為了描述數據的層次結構而附加的;同時,上表當中還不得不引入大量的空值(null)。
A 銀行組織機構序列在該組件中的一種表現效果如下圖所示:
XML 與關系數據庫的結合
由上述討論可知,應用 XML 進行數據管理具有特殊的優勢,可以有效地彌補關系數據庫在層次結構數據的管理上的不足和存在的問題,有著十分廣闊的前景。
當然,這個解決方案並不是完美無缺的,存在以下幾個問題。首先,XML 中所有的數據都以字符串進行存儲。這樣在文檔當中搜索或者在必須進行數據類型轉換的時候,可能帶來額外的時間開銷。當數據規模比較大、或者應用程序對時間的要求比較苛刻時,開發人員必須對這種額外的時間開銷給以足夠的重視。而解決這個問題的唯一途徑就是,建立一個典型的應用程序,並對它進行強度測試(stress test)。其次,XML 文檔在給人們帶來易讀性的同時,也具有潛在的安全性隱患。另外,XML 的許多相關標准和技術,還處於草案階段,沒有最終定型,不同技術廠商之間的利益紛爭也可能帶來比較嚴重的問題。
因此,一個自然的想法就是將 XML 與關系數據庫結合在一起,以發揮各自的長處,揚長避短。具體來說,就是用 XML 管理小規模的層次結構的數據,而用關系數據庫管理大規模的商業數據,兩者通過樹的節點的編碼進行連接。
例如,在組織機構編碼系統提供的組織機構序列的基礎上,可進一步利用關系數據庫技術完成組織機構的信息采集、查詢、統計、維護等功能。
小結
應用 XML 進行數據管理具有特殊的優勢,可以有效地彌補關系數據庫在層次結構數據的管理上的不足和存在的問題。但是,XML 技術和關系數據庫技術之間並不是相互競爭、相互排擠的關系,而是相互補充和相互促進的關系。實際上,XML 和關系數據庫具有很強的互補性,它們好像就是為在一起協作而設計的,將長期共存下去。一個綜合的數據管理系統幾乎都是需要同時使用 XML 和關系數據庫。一個好消息是,幾乎所有主要的關系數據庫產品都提供了對 XML 的支持。
參考資料