Tomisław Krężelewski informatyka, IV rok Deductive database systems Powstanie technologii dedukcyjnych baz danych Teoria bazy danych to kluczowe zagadnienie w dziedzinie systemów informacyjnych. Ich rozwój determinuje postęp większości technologii informatycznych. Początkowo dane w aplikacjach, będących systemami przechowującymi informacje, zapisywane były na taśmach magnetycznych, czy kartach perforowanych. Dostęp do nich polegał na tym, że program czytał pliki, nanosił odpowiednie zmiany w ich zawartości i zapisywał je ponownie w nowej wersji. Gdy upowszechniła się technologia twardych dysków, stało się możliwe dokonywanie zmian w treści plików bez kopiowania ich całości. Jednakże struktura plików i sposób dokonywania w nich zmian była wciąż osadzona w programach dokonujących tychże modyfikacji. Kolejnym ważnym krokiem było wypracowanie technologii: początkowo hierarchicznych, później sieciowych baz danych. Innowacja względem starszych rozwiązań polegała na tym, że opis danych stał się niezależny od aplikacji korzystających z nich. Odtąd na bazę danych można patrzeć, jak na wyodrębniony zasób. Wiele detali związanych z procedurami dostępu i administrowania danymi zostało powierzonych bazie danych i ukrytych przed twórcami aplikacji zewnętrznych. Najbardziej znaczącą koncepcją, zmieniająca całkowicie podejście do zagadnienia, okazała się technologia relacyjnych baz danych. We wcześniejszych rozwiązaniach, struktura i zawartość rekordu w bazie było niezależna od sposobów jego przechowywania, modyfikacji i dostępu do niego, przy czym powiązania pomiędzy rekordami zasadniczo były reprezentowane za pomocą wskaźników, więc aplikacja korzystająca z bazy musiała wiedzieć jak poruszać się po takiej strukturze danych – stad nazwa: nawigacyjne bazy danych. W myśl technologii relacyjnych baz danych, wszystkie rekordy są identyfikowane poprzez ich zawartość. Co więcej, relacyjne bazy danych zorganizowane według prawideł matematycznej teorii relacji, która jest ściśle powiązana z teorią rachunku predykatów pierwszego rzędu. Od chwili, gdy relacyjne bazy danych zostały zorganizowane zgodnie z matematyczną strukturą, stało się możliwe przekształcanie poszczególnych zapytań tak, by zapytanie pierwotne i otrzymane w wyniku transformacji dawały takie same rezultaty. Ten fakt stał się podstawa do rozwoju prac nad zagadnieniem optymalizacji zapytań. Gdy zapytanie zostaje utworzone w nawigacyjnej bazie danych, program żądający dostępu do informacji musi znać wiele szczegółów technicznych związanych z przechowywaniem danych (np. ścieżki dostępu itp.) oraz znać strategie znajdowania właściwych informacji w rozsądnym czasie. W zoptymalizowanym relacyjnym systemie bazodanowym, jednym z zadań systemu zarządzania bazą danych, jest konstruowanie ekonomicznych strategii realizacji zapytań. Można więc stwierdzić, że nawigacyjne bazy danych są bardziej deklaratywne niż sam system plików, gdyż detale związane ze strukturą rekordów i ich zawartością są zadeklarowane w systemie zarządzania bazą i są niezależne od aplikacji zewnętrznych. Analogicznie, relacyjne systemy baz danych są w większym stopniu deklaratywne niż systemy nawigacyjne, gdyż strategie dostępu do danych z reguły są określane przez system zarządzania bazą, a nie aplikację zewnętrzną. Prosta i precyzyjne określona struktura relacyjnych baz danych zawiera w sobie kilka pomocniczych obiektów, czy też specyficznych właściwości. Należą do nich: widoki, które są standardowymi zapytaniami przechowywanymi w bazie danych, a nie w zewnętrznej aplikacji ; ograniczenia integralnościowe, które są wymuszane przez bazę danych; triggery działające niezależnie od tego, jaka aplikacja wykonała dane operacje na zawartości bazy. Przyjrzyjmy się bliżej tym trzem elementom technologii. To tutaj technologia dedukcyjnych baz danych rozszerza możliwości oferowane przez systemy relacyjne. Widoki są konstruowane z tabel. System zarządzający bazą danych przechowuje zarówno reguły, według którego tworzone są poszczególne widoki, jak i ich schematy. Jest możliwa sytuacja, w której w bazie mamy bardzo dużo widoków oraz widoki zbudowane z innych widoków np. poprzez użycie operacji sumowania czy tez negacji. Słabością technik bazodanowych jest fakt, że baza potrafi pracować z widokiem, ale nie nad widokiem. Jedną z zalet dedukcyjnych baz danych, jest możliwość pracy nad widokami, przekształcanie ich zależnie od zastosowania np. w celu optymalizacji. Kolejnym brakiem jest fakt, ze relacyjne bazy danych nie dopuszczają do rekursywnego definiowania widoków. Nie ma w nich miejsca także dla rekursywnych zapytań, z których mogą być konstruowane widoki. Taka sytuacja powoduje, że wiele interesujących problemów nie może być rozwiązywanych przy pomocy technologii relacyjnych baz danych. Ważnym, bo obrazującym problem przykładem, jest centralna baza danych opisująca stan posiadania przedsiębiorstwa, która składa się z baz danych (np. z poszczególnych oddziałów firmy). Odkąd dedukcyjne bazy danych oferują znacznie lepsze narzędzia do zarządzania widokami i pozwalają na tworzenie bardziej użytecznych widoków, pozwalają na lepsza pracę z ograniczeniami integralnościowymi, włączając w to ich optymalizację. Wachlarz możliwości triggerów w relacyjnych bazach danych jest ograniczony, między innymi: triggery mogą być definiowane tylko dla znajdujących się w bazie tabel, na raz może być aktywowany tylko jeden trigger. Dedukcyjne systemy bazodanowe zezwalają na implementowanie bardziej zaawansowanych – aktywnych – baz danych, w których triggery mogą być definiowane dla widoków i w których możliwe jest równoległe wykonywanie wielu współpracujących triggerów. Dedukcyjne bazy danych – budowa Dedukcyjna baza danych jest podzielona na dwie części. Pierwsza z nich, to tradycyjna baza danych, zawierająca fakty (EDB – extensional database). Przez fakty rozumiemy definicje pewnych relacji. Relacje składające się na bazę faktów (EDB), są zdefiniowane wprost poprzez wymienienie wszystkich obiektów spełniających te relacje. Druga część to tak zwana baza wiedzy (IDB – intensional database), będąca zbiorem reguł wnioskowania. Na reguły te można patrzeć jak na definicje zależności zachodzących pomiędzy relacjami z EDB. Zawarte tutaj są widoki i ograniczenia integralnościowe. Uzupełnieniem tych dwu elementów jest tak zwany inference engine. Jest to mechanizm, który pozwala dedukować nowe fakty i reguły na podstawie tych umieszczonych już w bazie danych. Dedukcyjne systemy bazodanowe używają deklaratywnego języka programowania (jakim jest np. Prolog) do definiowania reguł i faktów. Wówczas wnioskowanie odbywa się zgodnie z regułami dedukcji takiego języka. Należy pamiętać, że dedukcyjna baza danych, to obiekt opisany przez zbiór faktów i reguł – wiele reguł definiujących tę samą relację musi być odbierane jako alternatywne podejście do tejże relacji. Użytkownik zadaje pytanie poprzez wskazanie celu: Czy cel jest logiczną konsekwencją faktów i reguł bazy danych? Datalog Technologia dedukcyjnych baz danych leży pomiędzy zagadnieniami teorii baz danych, programowaniem logicznym a systemami eksperckimi. Najwygodniejszym językiem do pracy z dedukcyjnymi bazami danych zdaje się być Datalog. W dużym skrócie można stwierdzić, że jest to język Prolog z dodatkowymi ograniczeniami: Nie zawiera negacji Zabronione jest używanie nazw funkcji jako parametrów predykatów Takie obostrzenie zasad powoduje, że obliczenia są zawsze skończone oraz umożliwiają jednoczesna pracę nad zbiorem wielu krotek. Dzieje się tak między innymi dlatego, że w odróżnieniu od języka Prolog, w Datalogu obliczenia wykonywane są metodą bottom-up. Reprezentacja bazy danych za pomocą konstrukcji języka Prolog Po pierwsze należy zauważyć, że procedura zawierająca niezanegowane klauzule jest przedstawieniem relacji w relacyjnej bazie danych. Pojedyncza klauzula odpowiada krotce w relacji. Poniżej znajduje się wykaz podstawowych konstrukcji Prologa analogicznych do języka zapytań SQL. Nazwa relacji: STUDENT Atrybuty: NUMER_INDEKSU:NR:integer NAZWISKO:NAZ:text PRZEDMIOT:PRZ:text Relacja: NR=1001, NAZ=Kowalski,PRZ=Logika NR=1002, NAZ=Nowak,PRZ=Algebra Reprezentacja w postaci procedury Prologa: Template %student(Numer_Ind,Nazwisko,Przedmiot). procedure student(1001,Kowalski,Logika). student(1002,Nowak,Algebra). Selekcja Zapytanie w SQL: SELECT * FROM STUDENT WHERE NR = 1001 Zapytanie w Prologu zwracające te samą krotkę: student(1001,Nazwisko,Przedmiot)? Projekcja Zapytanie w SQL: SELECT PRZ FROM STUDENT Zapytanie w Prologu: przedmiot(Przedmiot) :- student(_,_,Przedmiot). przedmiot(Przedmiot)? Złączenie Zapytanie w SQL: SELECT * FROM STUDENT, PRZEDMIOT WHERE STUDENT.PRZ = PRZEDMIOT.PRZ Jeżeli relacja PRZEDMIOT jest opisana przez procedurę przedmiot(Kod_Przedmiotu,Nazwa). to zapytanie w Prologu ma postać: student(Numer_Ind,Nazwisko,Kod), przedmiot(Kod,Nazwa). Dedukcyjne bazy danych a systemy eksperckie Dziedziny, w których wykorzystywane są zarówno baz danych jak i tradycyjne systemy eksperckie to przede wszystkim: Automatyzowanie zadań prawdziwych ekspertów Testowanie hipotez dotyczących jakiegoś znanego zagadnienia Znajdowanie nowych zależności pomiędzy zbadanymi zagadnieniami. Różnice pomiędzy systemami eksperckimi a dedukcyjnymi bazami danych przejawiają się w: sposobie wykorzystania bazy wiedzy – fakty i reguły w przypadku systemów eksperckich są ładowane do pamięci operacyjnej, podczas gdy dedukcyjne systemy baz danych korzystają z bazy danych (zazwyczaj przechowującej dane na dysku) sposobie zdobywania wiedzy – systemy eksperckie czerpią reguły i fakty od prawdziwych ekspertów w danej dziedzinie, podczas gdy dedukcyjne systemy bazodanowe budują swoją wiedzę na podstawie właściwości zgromadzonych danych.