異構資料庫

異構資料庫

異構資料庫系統是相關的多個資料庫系統的集合,可以實現數據的共享和透明訪問,幾個資料庫系統在加入異構資料庫系統之前本身就已經存在,擁有自己的數據陣管理系統、外構資料庫的各個組成部分具有自身的自治性,實現數據共享的同時,每個資料庫系統仍有自己的應用特性、完整性控制和安全性控制。

簡介


異構資料庫系統的異構性主要體現在以下幾個方面:
各個參與的資料庫可以分別運行在大型機、小型機、工作站、PC或嵌入式系統中。
基礎操作系統的異構
各個資料庫系統的基礎操作系統可以是UnixWindows NTLinux等。
DBMS本身的異構
可以是同為關係型資料庫系統的OracleSQL Server等,也可以是不同數據模型的資料庫,如關係、模式、層次、網路、面向對象,函數型資料庫共同組成一個異構資料庫系統。
----異構資料庫系統的目標在於實現不同資料庫之間的數據信息資源、硬體設備資源和人力資源的合併和共享。其中關鍵的一點就是以局部資料庫模式為基礎,建立全局的數據模式或全局外視圖。這種全局模式對於建立高級的決策支持系統尤為重要。
----大型機構在許多地點都有分支機構,每個子機構的資料庫中都有著自己的信息數據,而決策制訂人員一般只關心宏觀的、為全局模式所描述的信息。建立在數據倉庫技術基礎上的異構資料庫全局模式的描述是一種好的解決方案。數據倉庫可以從異構資料庫系統中的多個資料庫中收集信息,並建立統一的全局模式,同時收集的數據還支持對歷史數據的訪問,用戶通過數據倉庫提供的統一的數據介面進行決策支持的查詢。

操作


SQL Server資料庫之間進行數據導入導出
使用SELECT INTO導出數據
在SQL Server中使用最廣泛的就是通過SELECT INTO語句導出數據,SELECT INTO語句同時具備兩個功能:根據SELECT後跟的欄位以及INTO後面跟的表名建立空表(如果SELECT后是*, 空表的結構和FROM所指的表的結構相同);將SELECT查出的數據插入到這個空表中。在使用SELECT INTO語句時,INTO後跟的表必須在資料庫不存在,否則出錯,下面是一個使用SELECT INTO的例子。
假設有一個表table1,欄位為f1(int)、f2(varchar(50))。
SELECT * INTO table2 FROM table1
這條SQL語的在建立table2表后,將table1的數據全部插入到table1中的,還可以將*改為f1或f2以便向適當的欄位中插入數據。
SELECT INTO不僅可以在同一個數據中建立表,也可以在不同的SQL Server資料庫中建立表。
USE db1
SELECT * INTO db2.dbo.table2 FROM table1
以上語句在資料庫db2中建立了一個所有者是dbo的表table2,在向db2建表時當前登錄的用戶必須有在db2建表的許可權才能建立table2。使用SELECT INTO要注意的一點是SELECT INTO不可以和COMPUTE一起使用,因為COMPUTE返回的是一組記錄集,這將會引起二意性(即不知道根據哪個表建立空表)。

數據共享


----對於異構資料庫系統,實現數據共享應當達到兩點:一是實現資料庫轉換;二是實現數據的透明訪問。由華中科技大學開發的,擁有自主版權的商品化資料庫管理系統DM3系統,通過所提供的資料庫轉換工具和API介面實現了這兩點。
----DM3提供了資料庫轉換工具,可以將一種資料庫系統中定義的模型轉化為另一種資料庫中的模型,然後根據需要再裝入數據,這時用戶就可以利用自己熟悉的資料庫系統和熟悉的查詢語言,實現數據共享的目標。資料庫轉換工具首先進行類型轉換,訪問源資料庫系統,將源資料庫的數據定義模型轉換為目標資料庫的數據定義模型,然後進行數據重組,即將源資料庫系統中的數據裝入到目的資料庫中。
----在轉換的過程中,有時要想實現嚴格的等價轉換是比較困難的。首先要確定兩種模型中所存在的各種語法和語義上的衝突,這些衝突可能包括:

命名衝突


即源模型中的標識符可能是目的模型中的保留字,這時就需要重新命名。

格式衝突


同一種數據類型可能有不同的表示方法和語義差異,這時需要定義兩種模型之間的變換函數。

結構衝突


如果兩種資料庫系統之間的數據定義模型不同,如分別為關係模型和層次模型,那麼需要重新定義實體屬性和聯繫,以防止屬性或聯繫信息的丟失。
----總之,在進行數據轉換后,一方面源資料庫模式中所有需要共享的信息都轉換到目的資料庫中,另一方面這種轉換又不能包含冗餘的關聯信息。
----資料庫轉換工具可以實現不同資料庫系統之間的數據模型轉換,需要進一步研究的問題是:如果資料庫轉換同時進行數據定義模式轉換和數據轉換,就可能引起同一數據集合在異構資料庫系統中存在多個副本,因此需要引入新的訪問控制機制。在保證各個參與資料庫自治,維護其完整性、安全性的基礎上,對於異構資料庫系統提供全局的訪問控制、併發機制和安全控制。
----如果資料庫轉換隻進行數據定義轉換,不產生數據的副本,那麼在新的目的資料庫定義模型的框架下訪問數據,實現上仍是對源資料庫系統中數據的訪問。這時利用新的資料庫系統中的數據處理語言實現的事務,不能直接訪問源資料庫,必須進行事務級的翻譯才可以執行。

資料庫系統


----在異構數據系統中實現了數據的透明訪問,用戶就可以將異構分散式資料庫系統看成普通的分散式資料庫系統,用自己熟悉的數據處理語言去訪問資料庫,如同訪問一個資料庫系統一樣。但還沒有一種廣泛使用的數據定義模型和數據查詢語言,實現數據的透明訪問可以採用多對一轉換、雙向的中間件等技術。開放式資料庫互連(Open DataBase Connectivity,簡稱ODBC)是一種用來在相關或不相關的資料庫管理系統中存取數據的標準應用程序介面(API)。ODBC為應用程序提供了一套高層調用介面規範和基於動態鏈接庫的運行支持環境。常用的資料庫應用開發的前端工具如Power BuilderDelphi等都通過開放資料庫互聯(ODBC)介面來連接各種資料庫系統。而多數資料庫管理系統(如:Oracle、Sybase、SQL Server等)都提供了相應的ODBC驅動程序,使資料庫系統具有很好的開放性。ODBC介面的最大優點是其互操作能力,理想情況下,每個驅動程序和數據源應支持完全相同的ODBC函數調用和SQL語句,使得ODBC應用程序可以操作所有的資料庫系統。然而,實際上不同的資料庫對SQL語法的支持程度各不相同,因此,ODBC規範定義了驅動程序的一致性級別,ODBC API的一致性確定了應用程序所能調用的ODBC函數種類,ODBC 2.0規定了三個級別的函數, DM3 ODBC API支持 ODBC 2.0規範中第二級擴展的所有函數。

應用


隨著Internet應用的不斷普及,Internet的異構分散式信息系統正在迅速發展,Java以其平台無關性、移植性強,安全性高、穩定性好、分散式、面向對象等優點而成為Internet應用開發的首選語言。在Internet環境下,實現基於異種系統平台的資料庫應用,必須提供一個獨立於特定資料庫管理系統的統一編程界面和一個基於 SQL的通用的資料庫訪問方法。Java與資料庫介面規範JDBC(Java Database Connectivity)是支持基本SQL功能的一個通用的應用程序編程介面,它在不同的資料庫功能模塊的層次上提供了一個統一的用戶界面,為對異構資料庫進行直接的Web訪問提供了新的解決方案。 JDBC已被越來越多的資料庫廠商、連接廠商、Internet服務廠商及應用程序編製者所支持。