考慮要使用的資料庫功能

在基本互通性層級確定後,必須考慮應用程式所使用的資料庫功能。 例如,應用程式會執行哪些 SQL 語句? 應用程式會使用可捲動游標嗎? 交易? 程序? 長數據? 關於哪些功能可能不被所有 DBMS 支援,請參閱 SQLGetInfoSQLSetConnectAttrSQLSetStmtAttr 函式說明,以及 附錄 C:SQL 文法。 應用程式所需的功能可能會將部分 DBMS 從目標資料庫管理系統清單中移除。 他們也可能證明該應用程式能輕易針對多個資料庫管理系統(DBMS)。

例如,若所需功能簡單,通常能以高度互通性實作。 一個執行簡單 SELECT 語句並以僅向前游標檢索結果的應用程式,因其簡單性而很可能高度互通:幾乎所有驅動程式與資料庫管理系統都支援所需的功能。

然而,若所需功能較為複雜,如可捲動游標、定位式更新與刪除語句及程序,通常必須做出權衡。 有幾種可能性:

  • 互通性較低,功能更多。 該應用程式包含這些功能,但僅能與支援這些功能的資料庫管理系統(DBMS)相容。

  • 更高的互通性,功能較少。 這個應用程式會移除這些功能,但能支援更多資料庫管理系統。

  • 更高的互通性,還有可選功能。 應用程式包含這些功能,但僅在支援這些功能的資料庫管理系統中提供。

  • 更高的互通性,更多功能。 該應用程式會使用支援這些功能的 DBMS,並為不支援這些功能的 DBMS 模擬這些功能。

前兩種情況相對容易實作,因為這些功能要麼與所有支援的 DBMS 一起使用,要麼不支援任何 DBMS。 但後兩種情況則更為複雜。 在這兩種情況下,都必須檢查資料庫管理系統是否支援這些功能,而在最後一種情況下,則需要撰寫可能大量程式碼來模擬這些功能。 因此,這些方案可能需要較長的開發時間,且執行時可能較慢。

考慮一個通用查詢應用程式,可以連接到單一資料來源。 應用程式會接受使用者的查詢,並在視窗中顯示結果。 現在假設這個應用程式有一個功能,允許使用者同時顯示多個查詢的結果。 也就是說,他們可以執行一個查詢並查看部分結果,再執行另一個查詢並查看其部分結果,然後返回第一個查詢。 這造成互通性問題,因為有些驅動程式只支援單一主動陳述式。

應用程式有多個選擇,其依據是驅動程式在 SQLGetInfo 中回傳的 SQL_MAX_CONCURRENT_ACTIVITIES 選項。

  • 一定要支援多重查詢。 連接驅動程式後,應用程式會檢查有效語句的數量。 若驅動程式僅支援一個主動語句,應用程式會關閉連線並告知使用者驅動程式不支援所需功能。 此應用程式易於實作且功能完整,但互通性較低。

  • 千萬不要支援多張查詢。 應用程式會完全移除這個功能。 它容易實作且互通性高,但功能較少。

  • 只有當驅動程式支援時,才支援多重查詢。 連接驅動程式後,應用程式會檢查有效語句的數量。 應用程式只有在驅動程式支援多個啟用中的陳述時才允許使用者啟動新陳述句。 該應用程式功能與互通性較高,但實作較為困難。

  • 務必始終支援多個查詢,並在必要時加以模擬。 連接驅動程式後,應用程式會檢查有效語句的數量。 應用程式總是允許使用者在已有陳述活動時開始新的陳述。 如果驅動程式只支援一個主動語句,應用程式會開啟另一個連接到該驅動程式的連線,並在該連線上執行新的語句。 該應用程式具備完整功能與高度互通性,但實作較為困難。