考慮要使用的資料庫功能
在知道互通性的基本層級後,接著就必須考慮應用程式所使用的資料庫功能。 例如,應用程式會執行哪些 SQL 陳述式? 應用程式是否會使用可捲動的資料指標? 交易? 程序? 長資料? 如需哪些功能可能不會受到所有 DBMS 支援的概念,請參閱 SQLGetInfo、SQLSetConnectAttr 和 SQLSetStmtAttr 函式描述,以及附錄 C:SQL 文法。 應用程式所需的功能可能會將某些 DBMS 從目標 DBMS 清單中排除。 這些功能也可能會顯示應用程式可以輕鬆地以許多 DBMS 作為目標。
例如,如果所需功能很簡單,則通常可以使用高度互通性來加以實作。 應用程式如果會執行簡單 SELECT 陳述式並擷取具有順向資料指標的結果,則很可能會透過其簡單性而具有高度互通能力:幾乎所有驅動程式和 DBMS 都支援其所需的功能。
不過,如果所需的功能較複雜 (例如可捲動的資料指標、定點更新和刪除陳述式以及程序),則往往必須有所取捨。 有數種可能性:
較低的互通性,較多的功能。 應用程式包含多種功能,但僅適用於支援這些功能的 DBMS。
較高的互通性,較少的功能。 應用程式會捨棄一些功能,但可與更多 DBMS 搭配運作。
較高的互通性,選擇性的功能。 應用程式包含多種功能,但只提供給支援這些功能的 DBMS 使用。
較高的互通性,較多的功能。 應用程式會搭配支援相關功能的 DBMS 來使用這些功能,並針對不支援這些功能的 DBMS 模擬這些功能。
前兩個案例實作起來相對簡單,因為與這些功能搭配使用的,不是所有受支援的 DBMS,就是沒有任何受支援的 DBMS。 另一方面,後面兩種情況就比較複雜。 在這兩種情況中,您都必須檢查 DBMS 是否支援這些功能,而且在最後一個情況中,您可能必須撰寫大量程式碼來模擬這些功能。 因此,這些配置可能需要更多開發時間,而且在執行階段的速度可能會比較慢。
請考慮可以連線到單一資料來源的一般查詢應用程式。 此應用程式會接受來自使用者的查詢,並在視窗中顯示結果。 現在假設這個應用程式有一項功能,可讓使用者同時顯示多個查詢的結果。 也就是說,使用者可以執行查詢並查看某些結果、執行不同的查詢並查看其某些結果,然後再返回第一個查詢。 這會產生互通性問題,因為某些驅動程式只支援單一的作用中陳述式。
根據驅動程式針對 SQLGetInfo 中的 SQL_MAX_CONCURRENT_ACTIVITIES 選項傳回的內容,此應用程式有一些選擇:
一律支援多個查詢。 在連線到驅動程式後,此應用程式會檢查作用中陳述式的數目。 如果驅動程式只支援一個作用中陳述式,此應用程式會關閉連線,並通知使用者驅動程式不支援所需的功能。 此應用程式很容易實作,而且具有完整的功能,但互通性較低。
永遠不支援多個查詢。 此應用程式會完全捨棄功能。 其實作容易且具有高互通性,但功能較少。
只在驅動程式支援時,才支援多個查詢。 在連線到驅動程式後,此應用程式會檢查作用中陳述式的數目。 只在驅動程式支援多個作用中陳述式時,此應用程式才會允許使用者在已有作用中陳述式時啟動新的陳述式。 此應用程式的功能性和互通性較高,但較難實作。
一律支援多個查詢,並在必要時加以模擬。 在連線到驅動程式後,此應用程式會檢查作用中陳述式的數目。 此應用程式一律會允許使用者在已有作用中陳述式時啟動新的陳述式。 如果驅動程式只支援一個作用中陳述式,此應用程式會針對該驅動程式另外開啟一個連線,並在該連線上執行新的陳述式。 此應用程式有完整功能性和高互通性,但較難實作。