關於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 = 2 Delete from Table_3 where Col_3 like 'Michelle%'
在兩個平台上不是以同種方式編寫的命令:
Select getdate() Select case Fld when 1 then 'a' When 2 then 'b' Else 'c' End From Table_4 Oracle Select sysdate from dual Select DECODE (Fld, 1, 'a', 2, 'b', 'c') From Table_4
下面的兩篇文章包括了對Oracle PL/SQL命令和T-SQL命令比較的列表:
· 從Oracle移植到SQL Server
· 開始學SQL: SQL Server和Oracle之間的區別
可能的解決方案
我曾見過幾種對數據庫互操作性問題的可能的解決方案:
選擇哪個解決方案?
這個問題的答案依賴於應用程序的特性和平台。每個解決方案都易於實現,這裡沒有最好的解決方案。
結論:
如果你想要將你的應用程序開發成為不依賴數據庫的,你就應該仔細的計劃解決方案。考慮到應用程序在數據庫級別上的復雜性,還有所需代碼的總量。在計劃過程中,考慮到應用程序未來的發展是至關重要的。