Megosztás:


Az ODBC-megoldás

A kérdés tehát az, hogy az ODBC hogyan szabványosítja az adatbázis-hozzáférést? Két architekturális követelmény van:

  • Az alkalmazásoknak több DBMS-et is el kell tudniuk érni ugyanazzal a forráskóddal újrafordítás vagy újrakapcsolás nélkül.

  • Az alkalmazásoknak egyszerre több DBMS-hez is hozzá kell férniük.

És van még egy kérdés, figyelembe véve a piaci valóságot:

  • Mely DBMS-funkciókat tegye elérhetővé az ODBC? Csak az összes DBMS-ben közös funkciók, vagy bármely DBMS-ben elérhető funkciók?

Az ODBC a következő módon oldja meg ezeket a problémákat:

  • Az ODBC egy hívásszintű felület. Annak a problémának a megoldásához, hogy az alkalmazások hogyan férnek hozzá több DBMS-hez ugyanazzal a forráskóddal, az ODBC egy szabványos parancssori felületet határoz meg. Ez az Open Group és az ISO/IEC parancssori felületi specifikációinak összes függvényét tartalmazza, és az alkalmazások által gyakran megkövetelt további függvényeket biztosít.

    Az ODBC-t támogató összes DBMS-hez másik kódtárra vagy illesztőprogramra van szükség. Az illesztőprogram implementálja a függvényeket az ODBC API-ban. Egy másik illesztőprogram használatához az alkalmazást nem kell újrafordíteni vagy újrakonlinkolni. Ehelyett az alkalmazás egyszerűen betölti az új illesztőprogramot, és meghívja a benne lévő függvényeket. Több DBMS egyidejű eléréséhez az alkalmazás több illesztőprogramot tölt be. Az illesztőprogramok támogatottsága operációsrendszer-specifikus. A Microsoft Windows operációs rendszeren például az illesztőprogramok dinamikus csatolású kódtárak (DLL-ek).

  • Az ODBC egy szabványos SQL-nyelvtant határoz meg. A szabványos hívásszintű interfész mellett az ODBC szabványos SQL-nyelvtant is definiál. Ez a nyelvhelyesség az Open Group SQL CAE specifikációján alapul. A két nyelvhelyesség közötti különbségek kisebbek, és elsősorban a beágyazott SQL (Open Group) és a parancssori felület (ODBC) által igényelt SQL-nyelvtan közötti különbségek miatt. A nyelvhelyességi bővítmények a nyílt csoport nyelvtana által nem lefedett általánosan elérhető nyelvi funkciókat is elérhetővé teszik.

    Az alkalmazások ODBC- vagy DBMS-specifikus nyelvtan használatával küldhetnek be utasításokat. Ha egy utasítás a DBMS-specifikus nyelvhelyességtől eltérő ODBC-nyelvtant használ, az illesztőprogram átalakítja azt, mielőtt elküldené az adatforrásnak. Az ilyen konverziók azonban ritkán fordulnak elő, mert a legtöbb DBMS már szabványos SQL-nyelvtant használ.

  • Az ODBC egy illesztőprogram-kezelőt biztosít több DBMS egyidejű hozzáférésének kezeléséhez. Bár az illesztőprogramok használata megoldja a több DBMS egyidejű elérésének problémáját, az ehhez szükséges kód összetett lehet. Az összes illesztőprogrammal való együttműködésre tervezett alkalmazások nem kapcsolhatók statikusan egyetlen illesztőprogramhoz sem. Ehelyett futtatáskor kell betölteniük az illesztőprogramokat, és a bennük lévő függvényeket függvénymutatók táblázatán keresztül kell meghívniuk. A helyzet összetettebbé válik, ha az alkalmazás egyszerre több illesztőprogramot használ.

    Ahelyett, hogy minden alkalmazást erre kényszerítenek, az ODBC illesztőprogram-kezelőt biztosít. Az Illesztőprogram-kezelő az összes ODBC-függvényt implementálja – főként az illesztőprogramok ODBC-függvényeinek átmenő hívásaként –, és statikusan kapcsolódik az alkalmazáshoz, vagy futtatáskor betölti az alkalmazás. Így az alkalmazás az ODBC-függvényeket név szerint hívja meg az Illesztőprogram-kezelőben, nem pedig az egyes illesztőprogramok mutatói alapján.

    Ha egy alkalmazásnak szüksége van egy adott illesztőprogramra, először egy kapcsolati leírót kér, amellyel azonosíthatja az illesztőprogramot, majd kéri, hogy az Illesztőprogram-kezelő töltse be az illesztőprogramot. Az Illesztőprogram-kezelő betölti az illesztőprogramot, és az illesztőprogramban tárolja az egyes függvények címét. Ha odBC-függvényt szeretne meghívni az illesztőprogramban, az alkalmazás meghívja a függvényt az Illesztőprogram-kezelőben, és átadja az illesztőprogram kapcsolati leíróját. Az Illesztőprogram-kezelő ezután meghívja a függvényt a korábban tárolt cím használatával.

  • Az ODBC számos DBMS-funkciót tesz elérhetővé, de nem követeli meg, hogy az illesztőprogramok mindegyiket támogassa. Ha az ODBC csak az összes DBMS-hez gyakran használt szolgáltatásokat fedi le, akkor az nem lenne hasznos; végtére is, az oka, hogy annyi különböző DBMSs létezik ma az, hogy különböző funkciókkal rendelkeznek. Ha az ODBC minden olyan funkciót közzétett, amely bármely DBMS-ben elérhető, az illesztőprogramok számára lehetetlen lenne implementálni.

    Ehelyett az ODBC számos funkciót tesz elérhetővé – a legtöbb DBMS által támogatottnál többet –, de az illesztőprogramoknak csak a funkciók egy részhalmazát kell implementálniuk. Az illesztőprogramok csak akkor implementálják a fennmaradó funkciókat, ha az alapul szolgáló ADATBÁZIS-kezelő támogatja őket, vagy ha emulálás mellett döntenek. Így az alkalmazások írhatók úgy, hogy az adott DBMS illesztőprogramja által közzétett egyetlen DBMS funkcióit kihasználják, csak az összes DBMS által használt funkciókat használják, vagy egy adott funkció támogatását keresik, és ennek megfelelően reagáljanak.

    Annak érdekében, hogy az alkalmazások meghatározhassák az illesztőprogramok és a DBMS-támogatás funkcióit, az ODBC két függvényt biztosít (SQLGetInfo és SQLGetFunctions), amelyek általános információkat adnak vissza az illesztőprogramról és a DBMS képességeiről, valamint az illesztőprogram által támogatott függvények listáját. Az ODBC az API és az SQL nyelvhelyességi megfelelőségi szintjeit is meghatározza, amelyek az illesztőprogram által támogatott funkciók széles körét határozzák meg. További információ: Megfelelési szintek.

    Fontos megjegyezni, hogy az ODBC egy közös felületet határoz meg az általa kínált összes funkcióhoz. Emiatt az alkalmazások funkcióspecifikus kódot tartalmaznak, nem DBMS-specifikus kódot, és bármilyen olyan illesztőprogramot használhatnak, amely elérhetővé teszi ezeket a funkciókat. Ennek egyik előnye, hogy az alkalmazásokat nem kell frissíteni a DBMS által támogatott funkciók továbbfejlesztésekor; ehelyett egy frissített illesztőprogram telepítésekor az alkalmazás automatikusan használja a funkciókat, mert a kód funkcióspecifikus, nem pedig illesztőprogram-specifikus vagy DBMS-specifikus.