bazy danych, Informatyka, PHP,,,HTMT,,,CSS,,,SIECI KOMPUTEROWEL,,,LINUX,,,DUZO RÓZNOŚCI


Seminarium (Łukasz Rolbiecki)

Bazy danych

06.04.05

Relacyjne bazy danych (RDBMS)

Technologia relacyjnych baz danych zostala opracowana przez E. F. Codda i zaimplementowana pozniej m.in. przez IBM. Ostatecznie standard RDBMS zostal opracowany przez ANSI X3H2. Zwykle produkt kwalifikuje sie przy pomocy wersji specyfikacji jezyka SQL (ostatni to SQL2). Z czasem relacyjne bazy danych oddalaly sie od swej teoretycznej podstawy - algebry relacji.

Model danych

Dane przechowywane sa w tabelach, z ktorych kazda ma stala ilosc kolumn i dowolna ilosc wierszy. Wiersze odpowiadaja niepodzielnym krotkom (tuple), a kolumny odpowiednim atrybutom (attribute). Kolumny zawieraja dane okreslonego typu, po jednej wartosci w wierszu. Typy sa zdefiniowane na etapie projektowania bazy danych i jest ich okreslona ilosc, maja staly rozmiar i zwykle sa to ogolnie znane typy proste (liczba, data, godzina, ciag znakow, znak, itp.). Kazda tabela (relacja) ma zdefiniowany klucz (key) - wyrozniony atrybut lub kilka atrybutow, ktorego wartosc jednoznacznie identyfikuje dany wiersz.

Jezyk zapytan

Widok (view) jest to pewien podzbior bazy danych podawany w formie tabeli, bedacy wynikiem wykonania zapytania. Dane z bazy sa wybierane na podstawie wartosci w konkretnych pol w krotkach. Zapytania moga miec prosta postac i wymagac danych z wylacznie jednej tabeli, jak rowniez moga byc bardzo wyrafinowane wymagajac od systemu operowania laczeniem (join), zagniezdzaniem (nesting), roznica i suma teorii zbiorow (set union/difference) oraz innymi operacjami.

Model obliczeniowy

Wszelkie przetwarzanie oparte jest na wartosciach pol w krotkach. Krotki nie posiadaja uniwersalnego identyfikatora (niezmiennego w czasie). Nie ma tez zabezpieczenia przed odnoszeniem sie do innego wiersza tej samej tabeli. Przegladanie wynikow zapytan odbywa sie przy pomocy "kursora" umozliwiajacego przegladanie wiersz po wierszu. Podobnie ma sie sprawa uaktualniania danych. Manipulacja relacjami odbywa sie w sposob globalny przy uzyciu operatorow algebry relacji (lub temu podobnych jezykow) - przetwarzanie wiersz po wierszu nie jest dozwolone.

Liczace sie na rynku RDBMS

Oracle (wersje 7.x), System 10/11 [Sybase], Dynamic Server [Informix], DB/2 [IBM], OpenIngres [Computer Associates]

Obiektowe bazy danych (ODBMS)

Obiektowe bazy nie sa okreslone zadnym oficjalnym standardem. Obowiazujacy obecnie standard (opracowany przez ODMG - dzis już rozwiazana) zostal opublikowany w 2001 roku. Jednym z podstawowych celow modelu obiektowego jest bezposrednie odwzorowanie obiektow i powiazan miedzy nimi wchodzacych w sklad aplikacji na zbior obiektow i powiazan w bazie danych. Dzieki mechanizmom obiektowym mozna tez zwiekszyc niezaleznosc danych od aplikacji poprzez przeniesienie procedur obslugi danych (w postaci metod) do systemu zarzadzania baza.

Model danych

Model danych stosowany w obiektowych bazach danych korzysta z pojec takich jak klasy, atrybuty, metody, udostepnia identyfikatory obiektow (OID), hermetyzacje danych oraz metod, wielokrotne dziedziczenie, etc.

Obiektowe bazy danych lacza wlasnosci obiektowosci i obiektowych jezykow programowania z mozliwosciami systemow bazodanowych, a wiec nie tylko przechowywanie danych czy obiektow. Rozszerzaja mozliwosci obiektowych jezykow programowania (takich jak C++, Java czy Smalltalk) czyniac z nich narzedzia do latwego i efektywnego tworzenia systemow baz danych zmniejszajac stopien zlozonosci i ilosc kodu programow dzieki zgodnosci koncepcyjnej na kazdym etapie powstawania produktu.

Jezyk zapytan

Obiektowo zorientowany jezyk staje sie zarowno jezykiem programowania jak i jezykiem bazy danych, zapewniajac bezposrednia zaleznosc miedzy obiektem w aplikacji a obiektem w bazie. Z takiej bezposredniej zaleznosci korzystaja jezyki definicji danych, przetwarzania danych oraz zapytan. OBDMS zostaly do tej pory zintegrowane z jezykami C++, C, Smalltalk, Java i LISP.

Standard ODMG-93 dostarcza dodatkowo deklaratywny jezyki OQL. Jezyk ten nie jest w pelni kompatybilny z SQL. SQL2 pomija zupelnie pojecie typu w znaczeniu postrzeganym przez model obiektowy. Wynik zapytania w jezyku OQL moze natomiast byc struktura, literalem, obiektem lub zbiorem obiektow. Wiekszosc baz obiektowych jest jednak wyposazona w SQL w celu zapewnienia zgodnosci ze standardem ODBC (Object Database Connectivity).

Model obliczeniowy

Mimo, ze podobnie jak w RDBMS, wciaz mozliwe sa zapytania deklaratywne, glownym sposobem tworzenia i modyfikacji obiektow jest korzystanie bezposrednio z odpowiedniego dla bazy obiektowego jezyka programowania. Ponadto tworzone obiekty otrzymuja unikalne identyfikatory niezmienne w czasie, ktore moga byc wykorzystywane przez inne obiekty w celu definiowania powiazan z tymi obiektami. Zwykle identyfikatory sa konwertowane na wskaznik do pamieci w chwili wczytywania konkretnego obiektu - uzyskujemy dzieki temu skrocenie dostepu do obiektu gdy jest on obecny np. w pamieci podrecznej.

Liczace sie na rynku ODBMS

Jasmine [Computer Associates], Gemstone, O2, Object Store [Object Design], Objectivity/DB [Objectivity], Versant ODMBS [Versant]

Obiektowo-relacyjne bazy danych (ORDBMS)

Stanowia bardzo silna grupe systemow, ktora w ostatnim czasie dobrze zaznaczyla sie na rynku oprogramowania. Nazywane sa Object Relational lub Extended Relational. Sa wynikiem ostroznej ewolucji systemow relacyjnych w kierunku obiektowych. Kierunek rozwoju jest wyznaczany przez dwie tendencje:

Model danych

ORDBMS korzysta z modelu danych zawartego w standardzie SQL3, ktory mowi, ze "obiektowo-relacyjny model danych probuje dodac obiektowosci do tablic". Dane sa wciaz przechowywane w tabelach, jednak wartosci moga miec nieco bogatsza niz dotychczas postac - ADT (Abstract Data Type). Pola typu ADT zachowuja funkcjonalnosc zwyklych pol (moga byc uzywane do indeksowania, wyszukiwania, pobierania lub umieszczania danych) przy nowych zawartosciach (jak np. multimedia).

Jezyk zapytan

Poniewaz ten model rozszerza model relacyjny, dlatego opracowywany obecnie SQL3 (nazywany tez ObjectSQL) jest rozszerzeniem SQL. Rozszerzenie dotyczy rozbudowy mozliwosci zapytan o obiekty zagniezdzone, ADT, atrybuty o wartosci wyliczanej (np. metody obiektu), itp. Wyniki sa jednak wciaz podawane w formie tabel krotek, a nie jako kolekcje obiektow.

Model obliczeniowy

Rozszerzony jezyk SQL jest podstawowym interfejsem dostepu do danych. Bezposrednie odwzorowanie miedzy obiektami z jezyka programowania a obiektami / tabelami w bazie nie istnieje, tlumaczenie wciaz obciaza programiste.

Liczace sie na rynku ORDBMS

Oracle (wersje 8.x), Illustra (Universal Server) [Informix], DB/2 Extenders (Universal Database) [IBM], UniSQL/X [UniSQL], OSMOS [Unisys]

Migracja

0x01 graphic

--- typy wędrują do klas, nie są więc z góry zadane, ale można je „definiować” ---

Na powyzszym schemacie widac najistotniejsze zmiany architektury dokonane przy przejsciu z modelu relacyjnego na obiektowy. Nalezy tu szczegolnie zwrocic uwage, ze czesc informacji tkwiacej w bibliotekach, typach, aplikacjach i modulach zostala usystematyzowana i umieszczona bezposrednio w klasach.

Obiektowe bazy danych

W miare rozpowszechnienia technologii obiektowej oraz wraz z rosnaca krytyka modelu relacyjnego powstala nowa generacja baz danych znanych jako obiektowe bazy danych (ODB). ODB przechowuja obiekty - zakapsulkowane kombinacje danych o dowolnej strukturze razem ze skojarzonymi procedurami (metodami).

Obiektowe bazy danych powstaly poczatkowo jako rozwiniecie programowania zorientowanego obiektowo. Programisci Smalltalk i C++ potrzebowali magazynowac tzw. trwale dane, czyli dane, ktore pozostaja po zakonczeniu tworzacego je procesu. Pozniej zastanawiano sie nad odpowiednim zarzadzaniem zgromadzonymi danymi, wiec dolaczono cechy charakterystyczne dla baz danych. ODB dziedzicza wiec wszystkie zasadnicze cechy technologii obiektowej (istnienie zlozonych obiektow, tozsamosc obiektow, enkapsulacja danych i procedur, dziedziczenie, funkcje polimorficzne, rozszerzalnosc o nowe typy danych) i baz danych (trwalosc danych, oddzielenie logicznego i fizycznego poziomu danych, zarzadzanie wielodostepem, odtwarzanie spojnego stanu danych po awariach, zapytania ad hoc, zarzadzanie transakcjami i in.).

OBD maja przewage w stosunku do tradycyjnych baz danych przy przechowywaniu danych zorientowanych obiektowo, aktywnych, o dowolnej strukturze zlozonej czy zagniezdzonej, hierarchicznie uporzadkowanej czy zwiazanej siecia roznorodnych polaczen.


Najistotniejszym problemem dla OBD jest kwestia zapytan. Wiekszosc wspolczesnych obiektowych baz danych pozwala jedynie na proste przeszukiwanie przechowywanych obiektow. Takie udogodnienia jak zapytania zagniezdzone, kombinacje zapytan (suma, przeciecie, roznica), grupowanie, funkcja agregacji itd., czyli to, co relacyjne bazy danych w pelni dostarczaja, w przypadku obiektowych baz danych sa na razie nieosiagalne i znajduja sie w stadium rozwojowych prac badawczych. Rowniez kwestia optymalizacji zapytan w przypadku obiektowych baz danych jest znacznie bardziej skomplikowana.

Podstawowe pojecia

Obiekt
    Obiekt jest podstawowym pojęciem dla obiektowości. Obiekt reprezentuje sobą konkretny pojedynczy byt (książkę, osobę, samochód), charakteryzowany poprzez opis stanu (atrybuty obiektu) i zachowania tego bytu (metody obiektu). Opis ten jest realizowany przy użyciu klasy.

Atrybuty
    Atrybuty stanowią opis statycznej struktury klasy i obiektów, opis ich poszczególnych cech. Wyróżnia się:
    a) atrybuty klasy czyli tzw. atrybuty dzielone (shared attributes) np.: zestaw nadklas danej klasy oraz atrybuty wspólne dla wszystkich obiektów (czyli występujące jednorazowo dla wszystkich obiektów klasy a nie dla każdego obiektu osobno),
    b) atrybuty obiektów klasy czyli zbiór atrybutów występujących każdorazowo wraz z występowaniem obiektu; atrybuty te mogą być proste (należące do prostych typów danych) lub złożone.

Metody
    Metody stanowią opis dynamicznych zachowań obiektów, czyli operacje widocznych na zewnątrz obiektu a pozwalające dokonywać manipulacji na danych; metoda aktywowana jest przez komunikat adresowany do tzw. obiektu docelowego (target object) i w standardowym przypadku operuje wyłącznie na danych wchodzących w skład tego obiektu.

Enkapsulacja
    Koncepcja enkapsulacji (hermetyzacji) wywodzi się potrzeby rozdzielenia deklaracji i implementacji operacji oraz z potrzeby strukturyzacji programu poprzez jego podział na funkcjonalnie niezależne moduły.
Samo pojęcie wywodzi się z obiektowych języków programowania i odwołuje się do pojęcia abstrakcyjnych typów danych. W tym podejściu rozróżniamy: deklarację danej struktury i jej definicję. W części deklaracyjnej wyszczególnia się zestaw operacji jakie mogą być wykonywane na danym obiekcie - dla użytkownika jest to jedyna widoczna część obiektu. Część definicyjna składa się z definicji danych, czyli atrybutów i definicji procedur - metod.
Pojęcie enkapsulacji dla baz danych ma podobne znaczenie.

Tożsamość obiektu
    Tożsamość (object identity) jest stałą cechą obiektu. Jest to taka własność obiektu, która pozwala odróżnić go od każdego innego obiektu, który  istnieje w systemie lub który może się w nim pojawić.

Metody konstrukcji identyfikatorów obiektów
    Identyfikatory obiektów mogą być fizyczne albo logiczne. Identyfikatory fizyczne zawierają aktualny adres obiektu, identyfikatory logiczne są jedynie indeksem, dzięki któremu może być uzyskany właściwy adres fizyczny.
    Można rozróżnić co najmniej cztery typy identyfikatorów:
    - adres fizyczny - identyfikator jest adresem fizycznym obiektu, ta reprezentacja jest zwykle używana przez języki programowania, dla obiektowych baz danych jest nieużyteczna ze względu np. na przesuwanie obiektu
    - adres strukturalny - identyfikator składa się z dwóch części - pierwsza określa numer segmentu i numer strony, na której znajduje się obiekt, druga część zawiera logiczny numer szczeliny - pozycji, która określa położenie obiektu na stronie.
    - surogat - identyfikator jest generowany przy użyciu algorytmu, który gwarantuje jego unikalność; takie identyfikatory przekształcane są na adres fizyczny obiektu
    - surogat odwołujący się do typu - wariant poprzedniej metody, w którym korzysta się z identyfikatora typu (klasy) jak i części identyfikującej obiekt

Dziedziczenie
    Mechanizm dziedziczenia pozwala na tworzenie nowych klas, zwanych podklasami, z klas już istniejących. Nowe klasy przejmują (dziedziczą) struktury danych i metody klas, ponadto dołączane są do nich nowe własne struktury i procedury.
Dziedziczenie może mieć charakter bezpośredni (oznacza to, że struktura danych i metody są przenoszone do podklasy bez zmian) lub dokonywana jest transformacja składników klasy przed przekazaniem ich do podklasy.

Standard

Ogolne trendy we wspolczesnym przemysle komputerowym wskazuja na dalszy nieuchronny wzrost popularnosci obiektowych baz danych. Tradycyjne systemy baz danych uksztaltowaly sie w srodowisku hardware'owym zakladajacym istnienie jednego poteznego komputera (mainframe) przechowujacego i zarzadzajacego danymi oraz wielu zdalnie polaczonych prymitywnych terminali. W ciagu ostatnich lat sytuacja jednak zmienila sie. Gwaltowny rozwoj sieci spowodowal decentralizacje magazynowania danych. Dodatkowo komputery osobiste, najczesciej pelniace role terminali, dysponuja dzis znaczna moca obliczeniowa, ktora w ten sposob jest rozproszona w calej sieci. W konsekwencji coraz wieksza popularnosc zyskuja systemy rozproszone, w ktorych szczegolna role pelni tzw. technologia obiektow rozproszonych. Obiekty w tym systemie, bedac autonomicznymi "kawalkami" kodu, tworza otwarte srodowisko, w ktorym aplikacja moze korzystac z uslug wielu specyficznych obiektow zaimplementowanych za pomoca roznych jezykow programowania oraz dzialajacych na roznych platformach hardware'owych. Najbardziej rozpowszechnionym standardem okreslajacym zasady wspoldzialania rozproszonych obiektow jest specyfikacja CORBA (Common Object Request Broker Architecture), zdefiniowana przez gremium OMG (Object Management Group) zajmujace sie normowaniem software'u obiektowego. W 1993 roku inny komitet ODMG (Object Database Management Group) nalezacy do gremium OMG oraz skupiajacy wiodacych producentow OBD zdefiniowal ujednolicony standard dla obiektowych baz danych ODMG-93. Glownym celem takiego standardu bylo zapewnienie przenoszalnosci danych pomiedzy roznymi systemami OBD oraz mozliwosci "przepytywania" jednego systemu przez drugi. Standard ODMG sklada sie z modelu obiektowego, jezyka zapytan OQL (Object Query Language) oraz zbioru dowiazan jezykow programowania. Nalezy podkreslic, iz standard ODMG-93 jest zaprojektowany z mysla o integracji OBD ze standardem CORBA, co jest szczegolnie wazne dla systemow obiektow rozproszonych. Dzis prawie kazdy komercyjny system OBD oferuje mechanizmy wspolpracy bazy danych ze srodowiskiem CORBA. Podsumowujac mozna powiedziec, ze przejscie od architektury klient-serwer w kierunku technologii obiektow rozproszonych stwarza dobre perspektywy rozwoju dla OBD.

Co nowego wprowadzaja OBD?

W odroznieniu od relacyjnych baz danych, OBD przechowuja informacje w postaci obiektow - zakapsulkowanych kombinacji danych razem ze skojarzonymi z nimi procedurami (metodami) ich dotyczacymi. Przede wszystkim OBD pozwalaja w ten sposob na przechowywanie danych o dowolnej strukturze zdefiniowanej przez projektanta bazy (definiowanie klas obiektow), ktory jest zwolniony z obowiazku "splaszczania" danych do postaci dwuwymiarowej tablicy (relacji), majac do dyspozycji jedynie wbudowane proste typy danych (np. integer, string, date). Dodatkowo w relacyjnych bazach danych caly dostep do danych jest realizowany poprzez ich wartosc - w konsekwencji w obrebie jednej relacji nie moga wystepowac krotki majace we wszystkich polach identyczne wartosci. W przypadku OBD wszystkie obiekty - nosniki informacji - posiadaja swoj unikalny identyfikator (object identifier - OID) niezalezny od wartosci ich atrybutow. Poprzez ten wewnetrznie generowany identyfikator jest jednoznacznie okreslony dostep do obiektu. System moze wiec rozroznic, czy dwa opisywane obiekty przedstawiaja ten sam obiekt (operacja sprawdzania identycznosci), czy tez dwa rozne obiekty, wszystkie atrybuty ktorych maja rowne wartosci. Cecha ta jest szczegolnie wazna, gdyz pozwala systemowi na przechowywanie i udostepnianie tzw. danych zagniezdzonych (danych skladajacych sie z podczesci i tworzacych np. zlozona strukture drzewiasta) w sposob znacznie bardziej efektywny niz w przypadku dokonywania kosztownych operacji scalania tablic w RBD. Obiekty zagniezdzone sa laczone bezposrednio poprzez identyfikatory, co w porownaniu z modelem relacyjnym zmniejsza czas dostepu do danych az 10 (a w niektorych przypadkach - nawet 100!) krotnie. Posiadanie przez kazdy obiekt swojego identyfikatora, czyli wystepowanie tozsamosci obiektow umozliwia rowniez modelowanie roznorodnych powiazan miedzy danymi, traktujac skojarzone z danym obiektem zewnetrzne obiekty jako czesc jego wewnetrznej struktury. Powiazania te moga miec charakter relacji jednoznacznych (one-to-one), jeden do wielu (one-to-many) lub wzajemnie wieloznacznych (many-to-many). Wszystko to sprawia, ze obiektowe bazy danych sa znacznie lepiej przystosowane do przechowywania nowych typow danych, takich jak dane multimedialne, dane przestrzenne, strony HTML i in. Z tego powodu OBD z powodzeniem dotychczas stosowano przede wszystkim przy aplikacjach pracujacych z danymi zlozonymi (CAD/CAE - Computer Aided Design - Projektowanie wspomagane komputerem, GIS - Geographic Information System - System informacji geograficznej). OBD stanowia ponadto naturalne srodowisko dla tworzenia wielu wersji danych (obiektow rozroznialnych za pomoca OID) oraz konstrukcji tzw. aktywnych baz danych, czyli baz danych pozwalajacych na uruchamianie w obrebie systemu pewnych procedur w odpowiedzi na okreslone wydarzenia zachodzace w systemie.

Impedancja

Jedna z glownych zalet OBD jest zniesienie niedopasowania modelu bazy danych do modelu uzywanego przez programiste aplikacji (impedance mismatch) - bowiem OBD wykorzystuja obiektowy model danych, ktory jest zgodny z wieloma obiektowymi jezykami programowania ogolnego przeznaczenia (np. C++, Smalltalk). Dane, jak to jest w przypadku baz relacyjnych, nie musza byc "konwertowane" z formatu modelu fizycznego na reprezentacje uzywana w jezyku programowania, co jest bardzo "kosztownym" i mocno narazonym na bledy procesem. W przypadku OBD znika praktycznie scisla granica dzielaca programy aplikacji i elementy definicji bazy danych: niektore egzemplarze obiektow danego typu moga byc tymczasowe, inne stale, ale niezaleznie od tego moga byc w identyczny sposob traktowane w instrukcjach i wyrazeniach jezyka programowania.

Inna istotna zaleta OBD jest ujednolicony model pojeciowy, na ktorym operuja analityk, projektant i programista. Polepsza to w sposob zasadniczy ich wspoldzialanie oraz redukuje ryzyko powstawania bledow przy przejsciach pomiedzy roznymi fazami powstawania aplikacji. W tradycyjnych systemach baz danych programista musi wymyslic, jak wydobyc dane z tabel oraz jak je w nich umiescic. Natomiast w OBD programista ma do czynienia z obiektami chwilowymi i trwalymi w ujednolicony sposob - nie ma zadnych roznic pojeciowych pomiedzy programowaniem a baza danych. Analiza obiektowa odwzorowuje bezposrednio dziedzine zastosowania i zakres czynnosci systemu na model - definiowane sa obiekty wysokiego poziomu oraz ich zachowanie. Z kolei projektant "przerabia" je na obiekty niskiego poziomu, ktore dziedzicza wlasnosci i zachowania obiektow wyzszego poziomu (nie ma mozolnego "przejscia do projektowania"). Majac do dyspozycji wyspecyfikowane przez projektanta obiekty programista z latwoscia moze zaimplementowac pozadana funkcjonalnosc za pomoca obiektowego jezyka programowania oraz narzedzi OO-CASE (Object-Oriented Computer Aided Software Engineering).

Przejście do z modelu relacyjnego na obiektowy

Oczywiscie, mimo opisanych zalet OBD, dla wiekszosci uzytkownikow, ktorzy zainwestowali juz duze srodki finansowe w zainstalowany i dzialajacy software oraz w pracownikow obslugujacych systemy RBD, szybkie zaadoptowanie nowej technologii baz danych jest niemozliwe.

Aby zapewnic bardziej lagodne przejscie od technologii relacyjnej do technologii obiektowej w ostatnich latach a takze aby moc wykorzystac wszystkie zalety modelu relacyjnego powstalo wiele tzw. obiektowo-relacyjnych (lub hybrydowych) baz danych (np. POSTGRES, OpenOBD, Illustra), ktore w wiekszym lub mniejszym stopniu wykorzystuja elementy modelu relacyjnego. Glowna zasada dzialania takich systemow jest budowanie nad systemem zarzadzania relacyjna baza danych warstwy programowej pozwalajacej przetwarzac obiekty logiczne na skladniki podstawowe modelu relacyjnego, czyli umozliwiajace przechowywanie obiektow w tablicach relacyjnej bazy danych. Duza popularnosc zyskaly rowniez narzedzia middleware sluzace do pogodzenia modelu obiektowego z relacyjnym (np. Persistence, DBtools.h++). Za ich pomoca dokonuje sie konwersji obiektow na postac odpowiednia do przechowywania ich w istniejacych RBD. Podejscia te pozwalaja na korzystanie z dobrodziejstw jakie niesie technologia obiektowa przy zachowaniu podrzednego relacyjnego modelu bazy danych.

Oracle od Oracle8 - obiektowo-relacyjny serwer Oracle8, rozszerzony o mozliwosci obslugi dodatkowych typow danych takich jak wideo, audio, tekst oraz dane przestrzenne. Oracle8 zostal zintegrowany z najnowsza koncepcja Oracle'a - architektura przetwarzania sieciowego (Network Computing Architecture), ktora dostarcza srodowisko dla tworzenia, przechowywania i zarzadzania "komponentami" (autonomicznymi fragmentami kodu), ktore moga byc wykorzystywane przy tworzeniu aplikacji sieciowych dzialajacych w srodowisku heterogenicznym.

Informix od dluzszego czasu inwestuje w system Illustra, bedacy jednym z najbardziej zaawansowanych obiektowo-relacyjnych baz danych, dostepnych na rynku. Informix zapowiedzial wprowadzenie na rynek tzw. Universal Server, skupiajacego zaawansowane cechy obu tych narzedzi (relacyjnej i obiektowo-relacyjnej bazy danych).

Sybase natomiast wybral inna droge pogodzenia modeli relacyjnego i obiektowego. Wspolpracujac z Persistence Software Inc. Sybase postanowil utworzyc specjalny pomost (gateway) pomiedzy relacyjna baza danych a obiektowa aplikacja uzytkowa, ktory "w locie" wykonuje konwersje obiektow na relacje przechowywane w bazie danych. Pozwala to na szybsze wprowadzenie na rynek produktu obslugujacego obiekty, poniewaz podrzedny relacyjny system Sybase'a jest pozostawiany bez zmian. Na dluzsza mete jednak podejscie to nie jest konkurencyjne wskutek niedopuszczalnie duzych kosztow czasowych przejscia danych poprzez posrednie warstwy przetwarzania podczas translacji obiektowo-relacyjnej.

Podsumowanie

Podsumowujac, mozna powiedziec, ze OBD juz teraz sprawuja sie najlepiej w zastosowaniach, gdzie relacyjny model tradycyjne napotyka na trudnosci. Przede wszystkim sa to systemy, przechowujace dane o naturze zagniezdzonej. Jest wiec wielce prawdopodobne, ze w miare wzrostu potrzeby przechowywania danych multimedialnych, rozwoju Internetu i WWW OBD beda szybko zyskiwac na popularnosci dzieki ich naturalnemu dopasowaniu do takich zastosowan.

Metodyki obiektowe projektowania

    Najbardziej znane to:
    Metodyka Raumbaugh/OMT (Object Modelling TechniQue) - opisuje klasy i ich związki w trakcie procesu tworzenia projektowanego systemu. Proces tworzenia systemu został podzielony na siedem faz: strategii, analizy, projektu systemu, projektu obiektów, implementacji, testowania, pielęgnacji.
    W trakcie tych faz modeluje się system z trzech punktów widzenia używając do tego trzech różnych powiązanych ze sobą modeli:
    - Model Obiektów - opisuje statyczną stronę systemu pokazując strukturę obiektów w systemie wraz z informacjami o ich atrybutach, metodach i wzajemnych powiązaniach;
    - Model Dynamiczny - opisuje zmieniające się w czasie zachowanie projektowanego systemu, podstawowe pojęcia z nim związane to zdarzenie oraz stan, rozumiany jako kolekcja powiązań obiektu z innymi obiektami; model umożliwia opis zdarzeń zachodzących w systemie i dozwolonych sekwencji zdarzeń dla każdego obiektu;
    - Model Funkcjonalny - opisuje działania wykonywane przez system: przepływ danych i współdziałanie obiektów;

Metodyka Boocha skupia się na dostarczeniu narzędzi umożliwiających w miarę proste przedstawienie pojedynczego systemu tak by mógł być łatwo zaimplementowany. Proces rozwoju systemu podzielono na fazy: strategii, analizy, projektu, zmian i pielęgnacji systemu. Metodyka dostarcza różnych, powiązanych ze sobą modeli:
    - Model Logiczny - opisuje klasy i obiekty projektowanego systemu;
    - Model Fizyczny - opisuje oprogramowanie i sprzęt, które ma się składać na projektowany system;
    - Model Statyczny - opisuje statyczne niezmienne w czasie aspekty systemu: klasy, obiekty, moduły, procesy;
    - Model Dynamiczny - opisuje dynamiczne, zmieniające się w cza
sie cechy systemu: zmiany stanów i scenariusze;

    Metodyka Fusion jest metodyką drugiej generacji dla analizy i projektowania obiektowego. Dostarcza ona nie tylko zestawu notacji dla modelowania systemu na różnych etapach projektu, ale też systematyzuje opis poszczególnych faz projektu od specyfikacji, poprzez analizę i projekt do implementacji projektowanego systemu.

    Metodyka Shlaer/Mellora jest metodyką typu Object-Oriented Analysis, skupia się na analizie projektowanego systemu. Opisuje klasy, ich związki i powiązania między klasami w trakcie życia modelowanego systemu. Wyróżnione zostały trzy poziomy opisu: Poziom Systemu z wyróżnionym Zakresem Prac i Grafikiem Projektu. Poziom Zakresu dostarczający modele opisujące ogólny zakres planowanych podsystemów, Poziom Podsystemów w skład którego wchodzą:.
    - Model Informacyjny - opisuje klasy, ich własności (atrybuty) i związki z innymi klasami
    - Model Stanów - opisuje zachowania klas i ich związki w czasie
    - Model Procesów - służy do mod
elowania przetwarzania dla akcji opisanych przez Model Stanów

    Metodyka Coad/Yourdona jest metodyką typu  Object-Oriented Analysis and Object-Oriented Design method. Zakłada zatem wspomaganie procesu analizy i projektowania systemu. Wyróżnia poziomy: zagadnień, klas i obiektów, struktury, atrybutów usług, oraz komponenty: zakresu problemów, współpracy z człowiekiem, zarządzania zadaniami, zarządzania danymi.

POET

Mechanizmy jakimi zarządza POET

POET dostarcza system tworzenia obiektowych baz danych, który w pełni dostosowany jest do semantyki C++. POET jest zorientowany obiektowo, oznacza to, że jego klasy i obiekty posiadają następujące własności:

Jako baza danych dostarcza następujących własności:

Jako obiektowa baza danych dostarcza:

Programowanie zorientowane obiektowo jest odpowiednie dla obszernych oraz złożonych programów, bazy danych natomiast dla dużej ilości danych oraz szybkich zapytań bazujących na wartościach. POET łączy obydwa te wymagania dostarczając narzędzi koniecznych dla złożonych programów, wykorzystujących dostęp do dużej ilości danych.

Cechy POET'a

Tworzenie aplikacji z wykorzystaniem POET'a

W celu przedstawienia podstawowych operacji bazodanowych w POET'cie oraz zaprezentowania modelu programowania posłużymy się prostym przykładem - systemem fakturowania operacji sprzedaży. System posiada następującą strukturę klas:

Przykład: faktury - hierarchia klas

0x01 graphic

Tworzenie klas trwałych (persistent)

 Każdy obiekt klasy trwałej może być składowany w bazie danych. Klasę trwałą uzyskujemy przez dopisanie słowa kluczowego „persistent” do deklaracji klasy w C++:

 

persistent class Product{

private:

PtString name;

long list_price;

public:

Product();

virtual ~Product();

 

virtual void Show();

virtual void Fill();

};

Tworzenie bazy danych

Deklarację klas trwałych umieszcza się w pliku o rozszerzeniu *.HDC. Prekompilator POET'a, PTXX, wykorzystuje tę deklarację do utworzenia słownika klas dla bazy danych oraz specyficznej klasy administrującej klasy, która umożliwia wykonywanie zapytań oraz zarządzanie zbiorami obiektów trwałych. Każdy obiekt klasy trwałej może być zapisywany w bazie danych. POET tworzy bazę danych w oparciu o deklarację klas trwałych, rejestrując deklaracje klas w słowniku. Prekompilator stosuje się dla deklaracji nowych klas trwałych lub po ich modyfikacji w celu wygenerowania kodu rozpoznawanego przez kompilatory C++. PTXX generuje dołączany plik C++ który umożliwia obsługę klas trwałych przez dowolny kompilator C++.

PTXX - schemat kompilatora

 Kompilator PTXX wykonuje następujące operacje:

Podczas kompilacji plików *.HCD PTXX dodaje każdą napotkaną klasę do słownika, a następnie tworzy trzy pliki: *.HXX, *.CXX, oraz *.PTX. 

Schemat kompilatora PTXX

Schemat kompilacji i rejestracji bazy danych

0x01 graphic

0x01 graphic

 

 Poniższa tabela przedstawia cele wszystkich plików generowanych przez PTXX:        

 Nazwa

Format

Cel

Użycie

Słownik klas

Baza danych (opisująca klasy w tworzonej bazie danych)

Schemat bazy danych.

Utrzymywany przez PTXX automatycznie

Klasa factory

plik *.CXX
  

Opisuje jak budować i zarządzać obiektami.

Kompilowany i dołączany do programu.

Plik nagłówkowy klasy factory

plik *.PTX  

klasy Query , klasy AllSet, klasy ondemand, i klasy set dla klas persistent.

Jest automatycznie dołączany do pliku nagłówkowego klasy

Plik nagłówkowy (deklaracja klas)

plik *.HXX

Standardowa reprezentacja C++ deklaracji z pliku .HCD.

Dołączany do źródeł aplikacji.

Definicja obiektów klas

plik *.OCD

Prekompilowana reprezentacja pliku .HCD.

PTXX łączy je razem aby zbudować schemat bazy danych dla słownika klas.

Dla każdego pliku .hcd, POET tworzy plik .hxx, który zawiera deklaracje klas zawartych w pliku .hcd. Do pliku .hxx automatycznie dołączany jest plik .ptx, który jest plikiem nagłówkowym zawierającym klasy zarządzające bazą stowarzyszone z klasą aplikacji. Na końcu tworzony jest plik .cxx, który dostarcza różnorodne funkcje opisujące obiekty dla POET'a. Ten plik zawiera specjalizowane konstruktory oraz klasy dostarczające informacje ze słownika dla każdej klasy. Są to tzw. factory constructor table, stanowią one kod, który umożliwia zarządzanie klasami bez konieczności pisania kodu przez programistę. Plik ten jest kompilowany i dołączany do aplikacji.

Pliki dołączane oraz biblioteki

Poniżej przedstawiono przykład plików dołączanych do wersji C++ PRODUCT.CPP oraz wersji POET'a: 

Oryginalne pliki dołączane

Nowe (z użyciem POET'a)

// PRODUCT.CPP

#include <iostream.h>

 

#include <poetapp.hxx>

#include <menuapp.hxx>

#include "goodies.hxx"

#include "product.hxx"

 

 

// PRODUCT.CPP

#include <iostream.h>

#include <poet.hxx>

#include <poetapp.hxx>

#include <menuapp.hxx>

#include "goodies.hxx"

#include "product.hxx"

#include "product.cxx"

 

Jak widać zostały dodane dwa nowe pliki:

Otwieranie i zamykanie bazy danych

PtBase jest klasą reprezentującą jedną szczególną bazę danych w programie. Otwarcie bazy powoduje stworzenie obiektu PtBase, który można użyć do przydzielenia obiektów do bazy.

Istnieje możliwość otwarcia kilku obiektów PtBase równocześnie, które pozwalają na zarządzania kilkoma bazami danych w programie. Wersja POET'a client/server umożliwia kilku użytkownikom na dostęp do tej samej bazy danych równocześnie z pełną kontrolą współdziałania.

Przez otwarciem PtBase konieczna jest inicjalizacja POET'a przez wywołanie globalnej funkcji InitPOET(), która tworzy obiekt PtRoot zarządzający obiektami PtBase programu. Następnie możemy tworzyć PtBase i otwierać bazę przez wywołanie funkcji PtRoot::GetBase(”nameoftheserver”,” nameofthedatabase”, PtBase*). GetBase() tworzy PtBase, następnie zleca PtBase połączenie z serwerem i otwarcie bazy. Zamykanie bazy realizowane jest przez UngetBase(), następnie DeinitPOET() kończy pracę z POET'em.

#include <poet.hxx>

main()

{

InitPOET("ClientName");

PtBase* pObjBase;

int err = PtBase::POET()->GetBase("LOCAL", "base", pObjBase);

if (err < 0)

{

PtBase::POET()->UngetBase(pObjBase);

ErrorExit("Could not open database", err);

/ now we have an open PtBase...let's close it

tBase::POET()->UngetBase(pObjBase);

InitPOET();

return 0;

}

 Istnieje możliwość otwarcia PtBase bez wykorzystania PtRoot. Jednak PtRoot zapewnia, że zasoby dla każdej PtBase są alokowane tylko raz. Zaoszczędza to pamięć RAM oraz uchwyty do plików.

Składowanie obiektów

POET wyprowadza każdą klasę trwałą z klasy PtObject, klasy bazowej która dostarcza funkcje związane z bazą danych dla obiektów. W celu składowania obiektów trwałych po otwarciu bazy danych należy przypisać obiekt do tej bazy a następnie wywołać metodę Store(): 

Person *pPerson = new Person;

pPerson->Assign(pObjbase);

err = pPerson->Store();

check(err);

Rozszerzenie syntaktyki deklaracji

POET rozszerza standard deklaracji w C++ o deklaracje bazodanowych właściwości dla klas. PTXX wykorzystuje je do generowania słownika klas a następnie usuwa słowa kluczowe aby deklaracje mogły być czytane przez kompilator C++.

Deklaracja klasy trwałej jest następująca:

persistent class Product

Obiekt może posiadać wskaźnik do obiektu innej klasy. Jest to osiągane bezpośrednio używając deklaracji wskaźnika w C++, np.:

Customer* pCustomer;

Słowo kluczowe `ondemand' stosuje się w celu uzyskania referencji „na żądanie”. Oznacza to, że obiekt jest ładowany w żądanym momencie:

ondemand<Customer> odCustomer;

Obiekt może posiadać zbiór innych obiektów (np. faktura składa się ze zbioru pozycji). Zbiór deklarowany jest za pomocą słowa kluczowego `lset' :

lset<Entry*> Entries;

Zbór może być również ładowany na żądanie:

lset <ondemand<Entry>> Entries;

W przypadku gdy egzystencja obiektu zależy od istnienia innego (np. pozycje faktury istnieją gdy istnieje faktura) deklaruje się go poprzedzając słowem kluczowym `depend'. Poniższa linia w deklaracji klasy Invoice mówi, że Entries jest zbiorem „ondemand” obiektów klasy Entry, który zależy od klasy Invoice:

depend lset <ondemand<Entry>> Entries;

Indeksy pozwalają na definiowanie porządku sortowania obiektów oraz przyspieszają realizację zapytań. Słowo kluczowe `useindex' oznacza użycie indeksów:

useindex DateIX;

Dla składowych klas, które nie mają być składowane stosuje się słowo kluczowe `transient':

transient InvoiceDialog* pDialog;

 

Zapytania

Zapytania realizują przeglądanie zbioru obiektów i znajdowanie obiektów o określonych warunkach. POET oferuje kilka sposobów realizacji zapytań. W programie można używać zarówno Object Query Language oraz wywołań funkcji w C++. W obu przypadkach rezultatem zapytania jest zbiór obiektów spełniających pewne warunki. Te obiekty mogą być w każdym momencie użyte w programie. Użytkownik może również realizować zapytania za pomocą ODBC.

Object Query Language (OQL) jest bardzo podobny pod względem syntaktyki do SQL'a, lecz wykorzystuje on system typów języka C++ oraz rozumie semantykę deklaracji klas. ODMG przyjęło OQL jako standardowy język zapytań dla obiektowych baz danych.

Poniżej przedstawiono zapytanie wypisujące faktury, w których przynajmniej jedna pozycja posiada masę większą niż 100 dla produktu, który kosztuje więcej niż 50:

 define extent allInvoices for Invoice;

 

select i

from i in allInvoices,

e in i.Entries

where e.quantity > 100

and e.pProduct.list_price > 50

Zapytania są stringami dlatego też mogą one być przechowywane w bazie danych, przesyłane za pomocą sieci do innych procesów, zachowywane w postaci plików.

Filtry są bardzo podobne do zapytań, przy czym używając filtrów można pokazać każdą wyszukaną pozycję zaraz po jej znalezieniu. Natomiast wykorzystując zapytania rezultat przeszukiwanie dostępny jest dopiero po zakończeniu szukania.

Wszystkie filtry pracują w jednakowy sposób:

Dla każdej klasy trwałej POET tworzy klasę Query, wykorzystywaną do wyspecyfikowania warunków zapytań. Warunki mogą odnosić się do składowych obiektów będących referencjami, może być narzucony warunek na liczbę elementów zbioru spełniających warunek, itp. Warunki mogą być łączone operatorami boolowskimi (PtAND, PtOR, PtXOR, PtNOT, PtNAND, PtNOR, PtNXOR).

Filtr może zostać usunięty poprzez wywołanie PtAllSet::UnsetFilter().

 

Dodatkowe właściwości

Integracja z innymi aplikacjami

 POET zapewnia integrację z innymi aplikacjami poprzez następujące mechanizmy:

Architektura Client/server oraz praca grupowa 

POET dostarcza aplikacje dostępne dla wielu użytkowników wykorzystując architekturę client/server . Charakreryzuje się ona wykonywaniem zapytań na serwerze, po zakończeniu przeszukiwania jedynie znaleziony zbiór zostaje przesłany do klienta.

POET dostarcza możliwości zabezpieczania danych poprzez operacje zakazu wykonywania odczytu, zapisu i usuwania obiektów bazy.

POET oferuje różnorodne właściwości które ułatwiają tworzenie aplikacji orientowanych na pracę grupową, podczas której kilka osób pracuje razem używając tych samych obiektów w tym samym czasie.

Pierwszym wymaganiem dla takiego typu systemów jest prawdziwa wieloużytkownikowa architektura. W przypadku gdy jedna osoba dokonuje tymczasowych zmian bardzo ważnym jest zachowanie ich tak aby możliwe było cofnięcie operacji oraz dokonanie zabezpieczeń przed jednoczesną modyfikacją danych przez kilka osób.

POET dostarcza następujące mechanizmy: Watch & notify, możliwość odwołań do obiektów innej bazy danych oraz CheckIn / CheckOut, umożliwiające dokonywanie zmian w przestrzeni użytkownika, które mogą być następnie przerzucone do centralnej bazy danych.

Narzędzia wspomagające tworzenie i administrowanie bazy danych 

POET Developer's Workbench jest zintegrowanym środowiskiem, które umożliwia uruchamianie prekompilatora, tworzenie bazy danych, testowanie deklaracji klas, przeglądanie i edytowanie obiektów w bazie danych, uruchamianie zapytań OQL. Wynikowy zbiór wyświetlany jest za pomocą browsera obiektów, który w prosty sposób umożliwia przeglądanie obiektów bazy.

Narzędzia wspomagające administrowanie bazą danych umożliwiają następujące operacje:

wykonywanie backup'ów on-line, tworzenie pustej bazy danych, regenerację indeksowania, uaktualnianie formatu bazy danych do nowych wersji POET'a, zwiększanie liczby osób mających dostęp, sprawdzanie którzy z użytkowników mają dostęp do serwera, zabezpieczanie danych poprzez kontrolę dostępu, logowanie się użytkowników, prawa dostępu itp.

18



Wyszukiwarka

Podobne podstrony:
cwicz6, wisisz, wydzial informatyki, studia zaoczne inzynierskie, sieci komputerowe
Jak wstawić do bazy danych kod PHP i potem wykonać go w momencie pobrania z bazy, PHP Skrypty
cwicz4, wisisz, wydzial informatyki, studia zaoczne inzynierskie, sieci komputerowe
Teoria informatyki, Szkoła, Systemy Operacyjnie i sieci komputerowe, utk, semestr II
cwicz2, wisisz, wydzial informatyki, studia zaoczne inzynierskie, sieci komputerowe
odpowiedzi na bazy danych, informatyka
cwicz3, wisisz, wydzial informatyki, studia zaoczne inzynierskie, sieci komputerowe
cwicz5, wisisz, wydzial informatyki, studia zaoczne inzynierskie, sieci komputerowe
cwicz8, wisisz, wydzial informatyki, studia zaoczne inzynierskie, sieci komputerowe
sko-konspekt, wisisz, wydzial informatyki, studia zaoczne inzynierskie, sieci komputerowe
cwicz7, wisisz, wydzial informatyki, studia zaoczne inzynierskie, sieci komputerowe

więcej podobnych podstron