許多軟體公司都理解開發不依賴於特定資料庫類型(例如,Oracle , SQL Server ,DB2)的應用程式的重要性,它可以讓客戶們選擇自己習慣的平台。一般來說,軟體開發人員都能夠識別出他們的負責資料庫維護的客戶,和必須使用現有平台和個人化的客戶。
關於Oracle和SQL Server之間的區別,已經有很多篇文章從企業的角度和資料庫管理員的角度出發描寫了兩者之間的一般差別。這篇文章裡面將會從應用程式的角度向你描述SQL Server 和Oracle平台之間的區別,並且將會討論開發不依賴於資料庫環境的應用程式的幾種可能的方法。
與此同時,我不會再論討對於應用程式來說,兩個平台之間顯而易見的區別,例如表的分割和索引。
定義通用介面和語言
有很少的幾種通用語言和介面可以讓應用程式不依賴於資料庫,想來也可以以同樣的方式應用在關係型資料庫上面:
ANSI是美國國家標準局定義的,這是一家志願者成員的組織(用私人基金運轉),他們在有關裝置和程式等廣泛領域內開發了國家承認的標準。在資料庫領域,ANSI定義了編寫SQL 命令的標準,假設命令可以運行在任何的資料庫上,而不需要更改命令的文法。
ODBC是開放資料庫連接(ODBC)介面,微軟定義的,它可以讓應用程式訪問資料庫管理系統(DBMS)中的資料,使用SQL 作為訪問資料的標準。ODBC允許最大的互聯性,這意味著一個單個的應用程式可以訪問不同的資料庫管理系統。然後,應用程式終端使用者可以添加開放資料庫連接(ODBC)資料庫驅動來將應用程式與他們所選擇的資料庫管理系統連結上。
OLEDB,是ODBC的繼承者,是一組允許例如基於VB,C++,Access等任何可以串連到類似SQL Server ,Oracle ,DB2,MySQL等背景“前台”的軟體組件。在許多種情況下,OLEDB組件都比原有的ODBC提供了好得多的效能。
JDBC(Java資料庫連接)應用程式介面是Java程式設計語言和廣泛範圍的資料庫,SQL 資料庫和其他表列資料來源(例如試算表或者普通文字檔)之間,進行不依賴於資料庫的串連的行業標準。JDBD應用程式介面為基於SQL的資料庫訪問提供了調用層級的應用程式介面。
真實世界中的通用介面
不幸的是,並不是所有資料庫層級的命令都是ANSI,每個資料庫平台都有自己的擴充功能。ANSI,或者通用介面,一般來說都代表著幾本功能,因此也可能意味著喪失了效能方面的競爭力。對於小型資料庫和小型應用程式來說,要維護對資料庫的通用訪問是簡單的,但是當資料庫和/或應用程式變得越來越大,越來越複雜,你就不得不向代碼中添加功能。
樣本:
在兩個平台上以同種方式編寫的命令:
Insert into Table_1 values (1,'Michelle')Update Table_2 set Col_1 = 2Delete from Table_3 where Col_3 like 'Michelle%' |
在兩個平台上不是以同種方式編寫的命令:
Select getdate() Select case Fld when 1 then 'a' When 2 then 'b' Else 'c' EndFrom Table_4OracleSelect sysdate from dualSelect DECODE (Fld, 1, 'a', 2, 'b', 'c')From Table_4 |
下面的兩篇文章包括了對Oracle PL/SQL命令和T-SQL命令比較的列表:
· 從Oracle移植到SQL Server
· 開始學SQL: SQL Server和Oracle之間的區別
可能的解決方案
我曾見過幾種對資料庫互通性問題的可能的解決方案:
選擇哪個解決方案?
這個問題的答案依賴於應用程式的特性和平台。每個解決方案都易於實現,這裡沒有最好的解決方案。
結論:
如果你想要將你的應用程式開發成為不依賴資料庫的,你就應該仔細的計劃解決方案。考慮到應用程式在資料庫層級上的複雜性,還有所需代碼的總量。在計划過程中,考慮到應用程式未來的發展是至關重要的。
(