Udostępnij przez


Rozważanie funkcji bazy danych do użycia

Po zapoznaniu się z podstawowym poziomem współdziałania należy rozważyć funkcje bazy danych używane przez aplikację. Na przykład jakie instrukcje SQL będą wykonywane przez aplikację? Czy aplikacja będzie używać kursorów przewijanych? Transakcji? Procedury? Długie dane? Aby dowiedzieć się, jakie funkcje mogą nie być obsługiwane przez wszystkie systemy DBMS, zobacz OPISy funkcji SQLGetInfo, SQLSetConnectAttr i SQLSetStmtAttr oraz Dodatek C: Gramatyka SQL. Funkcje wymagane przez aplikację mogą wyeliminować niektóre systemy zarządzania bazami danych (DBMS) z listy docelowych DBMS. Mogą ono również wskazywać, że aplikacja może łatwo obsługiwać wiele systemów zarządzania bazami danych.

Jeśli na przykład wymagane funkcje są proste, zazwyczaj można je zaimplementować z wysokim stopniem współdziałania. Aplikacja, która wykonuje prostą instrukcję SELECT i pobiera wyniki z kursorem tylko do przodu, prawdopodobnie będzie wysoce współdziałać ze względu na jego prostotę: Prawie wszystkie sterowniki i zestawy DBMS obsługują funkcje, których potrzebuje.

Jeśli jednak wymagane funkcje są bardziej złożone, takie jak kursory z możliwością przewijania, instrukcje aktualizacji i usuwania, a także procedury, należy często wprowadzać kompromisy. Oto kilka możliwości:

  • Niższa interoperacyjność, więcej funkcji. Aplikacja zawiera funkcje, ale działa tylko z systemami DBMS, które je obsługują.

  • Większa współdziałanie, mniejsza liczba funkcji. Aplikacja pomija funkcje, ale współpracuje z większej liczbie systemami zarządzania bazami danych.

  • Wyższa interoperacyjność, funkcje opcjonalne. Aplikacja zawiera funkcje, ale udostępnia je tylko tym systemom DBMS, które je obsługują.

  • Większa interoperacyjność, więcej funkcji. Aplikacja wykorzystuje funkcje baz danych DBMS, które je obsługują, a dla tych, które ich nie obsługują, emuluje je.

Pierwsze dwa przypadki są stosunkowo proste do zaimplementowania, ponieważ funkcje są używane ze wszystkimi obsługiwanymi systemami DBMS lub bez nich. Z drugiej strony dwa ostatnie przypadki są bardziej złożone. W obu przypadkach należy sprawdzić, czy system DBMS obsługuje funkcje, a w ostatnim przypadku napisać potencjalnie dużą ilość kodu w celu emulowania tych funkcji. W związku z tym te schematy mogą wymagać więcej czasu programowania i mogą być wolniejsze w czasie wykonywania.

Rozważmy ogólną aplikację zapytań, która może łączyć się z pojedynczym źródłem danych. Aplikacja akceptuje zapytanie od użytkownika i wyświetla wyniki w oknie. Teraz załóżmy, że ta aplikacja ma jedną funkcję, która umożliwia użytkownikom wyświetlanie wyników wielu zapytań jednocześnie. Oznacza to, że mogą wykonać zapytanie i przyjrzeć się niektórym z wyników, wykonać inne zapytanie i przyjrzeć się niektórym jego wynikam, a następnie wrócić do pierwszego zapytania. Jest to problem z współdziałaniem, ponieważ niektóre sterowniki obsługują tylko jedną aktywną instrukcję.

Aplikacja ma wiele opcji, na podstawie tego, co sterownik zwraca dla opcji SQL_MAX_CONCURRENT_ACTIVITIES w programie SQLGetInfo:

  • Zawsze obsługuj wiele zapytań. Po nawiązaniu połączenia ze sterownikiem aplikacja sprawdza liczbę aktywnych instrukcji. Jeśli sterownik obsługuje tylko jedną aktywną instrukcję, aplikacja zamyka połączenie i informuje użytkownika, że sterownik nie obsługuje wymaganych funkcji. Aplikacja jest łatwa do zaimplementowania i ma pełną funkcjonalność, ale jej interoperacyjność jest niższa.

  • Nigdy nie wspieraj wielu zapytań. Aplikacja całkowicie pominie tę funkcję. Jest łatwa w implementacji i ma wysoką interoperacyjność, ale ma ograniczoną funkcjonalność.

  • Obsługuj wiele zapytań tylko wtedy, gdy sterownik to obsługuje. Po nawiązaniu połączenia ze sterownikiem, aplikacja sprawdza liczbę aktywnych zapytań. Aplikacja umożliwia użytkownikowi uruchomienie nowej instrukcji, gdy jest ona już aktywna tylko wtedy, gdy sterownik obsługuje wiele aktywnych instrukcji. Aplikacja ma wyższą funkcjonalność i współdziałanie, ale jest trudniej zaimplementować.

  • Zapewniaj wsparcie dla wielu zapytań i emuluj je w razie potrzeby. Po nawiązaniu połączenia ze sterownikiem aplikacja sprawdza liczbę aktywnych instrukcji. Aplikacja zawsze umożliwia użytkownikowi uruchomienie nowej instrukcji, gdy jest już aktywna. Jeśli sterownik obsługuje tylko jedną aktywną instrukcję, aplikacja otwiera dodatkowe połączenie z tym sterownikiem i wykonuje nową instrukcję na tym połączeniu. Aplikacja ma pełną funkcjonalność i wysoką interoperacyjność, ale jest trudna do zaimplementowania.