Zapytanie w sprawie bazy

Na rynku jest dostępnych co najmniej kilka podobnych pakietów, przeznaczonych do pisania aplikacji stricte bazodanowych. Wystarczy wymienić chociażby Clarion czy PowerBuilder. Co ciekawe, PowerBuilder często jest używany do pisania rozwiązań wykorzystujących bazy Oracle.

W przypadku, gdy powstające rozwiązanie jest 'typowym' programem bazodanowym, warto zastanowić się, czy zamiast stosować jakiś język ogólnego przeznaczenia - C++, Javę, Visual Basic czy C#, nie lepiej sięgnąć po mniej popularny język, który wprawdzie ma wiele ograniczeń, ale pozwala szybko i prosto pisać kod współpracujący z bazą danych. Programista korzystający z PowerBuildera nie musi się troszczyć np. o właściwy mechanizm stronicowania czy sprawdzanie poprawności danych wprowadzanych do bazy. Ponadto PowerBuilder dysponuje prostymi mechanizmami pozwalającymi przekształcić program w taki sposób, by był dostępny za pośrednictwem przeglądarki internetowej.

W FoxPro pole tabeli jest tak naprawdę traktowane jak zmienna w programie i w zależności od kontekstu przypisanie wartości może np. spowodować zmianę pola w bazie. Z jednej strony, owszem, może to prowadzić do komplikacji w kodzie, ale z drugiej, trudno sobie wyobrazić prostszy mechanizm sterowania wykonaniem programu.

Specjalizacja wyjaśnia też popularność rozwiązań napisanych w języku Clipper, rozwijanego obecnie głównie w ramach projektu Harbour. Pisanie w Clipperze nie wymaga nawet znajomości podstaw baz relacyjnych - programista pracuje 'na tabelach', ustawiając ciągi filtrów itp. Do wdrożenia takiego rozwiązania wystarczą dowolny serwer plików i stacje robocze, które mogą uruchomić program w systemie DOS. Oczywiście, takie rozwiązania mają dużo wad (Clipper nie zapewnia integralności danych).

Innym przykładem może być Microsoft Access, który pozwala łatwo zbudować interfejs dla aplikacji bazodanowej - także i w tym przypadku od programisty nie są wymagane szczególne umiejętności.

Bazy a kod "nierelacjny"

Dla baz relacyjnych i języków obiektowych powstało wiele narzędzi, które na podstawie schematu bazy relacyjnej automatycznie generują odpowiednie obiekty. Mogą to być różnego typu generatory kodu czy też dodatki do środowisk IDE, które np. pozwalają od razu utworzyć 'obiekty biznesowe' (dopisywanie, aktualizacja itp.).

Niestety, operacja w drugą stronę, tj. zapisanie struktur obiektowych w bazie relacyjnej, jest znacznie bardziej skomplikowana. Tak naprawdę trudno jest wskazać jeden, najlepszy sposób odwzorowania dziedziczenia w bazie relacyjnej. Czy używać dodatkowych tabel łączących obiekty, czy też może złamać zasady optymalnego projektowania baz i niektóre elementy powielić?

W przypadku baz Oracle można zapisać obiekt Javy bezpośrednio w bazie (niemal jako 'pole'). Gdy jednak chce się równocześnie wybierać obiekt o danych atrybutach przy użyciu rozszerzonego SQL, pojawiają się problemy. Podobna sytuacja występuje w przypadku baz Sybase.

Dla DB2 i WebSphere powstała spec-jalna biblioteka Hibernate, która pozwala zdefiniować mapowanie pomiędzy strukturą obiektową a układem tabel w bazie. Yukon - kolejna wersja Microsoft SQL Server - według zapowiedzi ma także pozwalać w łatwy sposób zapisywać obiekty .Net.

Oprócz tego na rynku jest dostępnych wiele baz danych 'nierelacyjnych' - hierachicznych, obiektowych itp. FastObject firmy Poet to chyba najbardziej znana czysto obiektowa baza danych. FastObject w ogóle nie obsługuje relacyjnych zapytań SQL. Programista, decydując się na wykorzystanie takiej bazy, musi używać albo języka JDOQL (standard Javy), albo OQL (przeznaczony do zapytań ad hoc).Oba języki pozwalają wybrać obiekty o określonych atrybutach, ale wymagają zupełnie innego projektowania struktur niż w bazach relacyjnych. Inaczej też wygląda mechanizm uprawnień praktycznie prawa są przypisywane klasom określonego typu. Co ciekawsze, można też przypisywać prawa obiektom danego typu opisanym atrybutami spełniającymi określone relacje. Przykładowo, początkujący sprzedawca może mieć prawo przyjmowania transakcji, pod warunkiem że kwota nie przekracza 1000 zł. Osiągnięcie analogicznego mechanizmu w świecie baz relacyjnych jest znacznie trudniejsze. Dodatkowy moduł Oracle - Label Security - pozwala uzyskać podobny efekt, ale niewiele baz w ogóle implementuje taki mechanizm.


TOP 200