Aktualizowalne perspektywy (2)


Perspektywa jako obiekt bazy danych"
Operatory "konsumujące" identyfikatory wirtualne
Tworzenie obiektów wirtualnych
Podperspektywy
Optymalizacja
Porównanie z trygerami "instead of"
Perspektywa jako obiekt bazy danych
Z punktu widzenia organizacji składu obiektów oraz stosu ENVS wprowadzenie takiej definicji jako struktury danych powoduje następujące skutki:
W składzie, w obszarze trwałych danych, pojawia się obiekt złożony o nazwie BogatyPracDef, z odpowiednimi podobiektami.
Na stosie ENVS, w sekcji trwałych danych pojawiają się dwa nowe bindery: BogatyPracDef(r1), z referencją r1 do obiektu definicji perspektywy oraz binder BogatyPrac(r2), z referencją r2 do podobiektu tego obiektu.
Pierwszy binder będzie używany dla zarządzania perspektywą, np. dla jej usunięcia lub modyfikacji.
Drugi binder będzie służył do wiązania nazwy obiektów wirtualnych występującej w zapytaniach.
Wiązanie będzie automatycznie powodowało wywołanie procedury BogatyPrac.
Operatory "konsumujące" identyfikatory wirtualne
Każdy z generycznych operatorów działających na obiektach wirtualnych będzie przeciążany przez procedury napisane przez definiującego perspektywę.
Wyróżniamy cztery takie operatory:
Dereferencja (retrieve). Podobnie jak dla zwyczajnej dereferencji, operator musi być zastosowany wszędzie tam, gdzie identyfikator obiektu wirtualnego musi zmienić się na wartość; np. operacja print, operatory +, <, parametr wołany przez wartość (call-by-value) itd.;
Podstawienie (update). Operator posiada jako dodatkowy parametr podstawianą wartość (r-value);
Usunięcie (delete);
Wstawianie (insert). Operator powoduje wstawienie pewnego obiektu (być może też wirtualnego) "do środka" obiektu wirtualnego. Dodatkowym parametrem operatora jest referencja do wstawianego obiektu.
Tworzenie obiektów wirtualnych
Powyższa koncepcja nie przykrywa tworzenia nowych obiektów wirtualnych.
Operator tworzenia nie może działać na identyfikatorze wirtualnym, wobec czego musi być zdefiniowany w inny sposób.
Jednym z takich sposobów jest napisanie explicite procedury tworzenia obiektu wirtualnego (dokonującej odpowiednich aktualizacji obiektów rzeczywistych).
Więcej możliwości związanych z definicją procedury automatycznie przeciążającej operator tworzenia obiektu wirtualnego może dać wprowadzenie specjalnej klasy dla obiektów wirtualnych i parametryzowanie instrukcji tworzenia obiektów tą klasą.
Innym sposobem jest wykorzystanie operatora on_insert, poprzez utworzenie nadperspektywy nad daną perspektywą i następnie wstawianie fizycznego (czasowego) obiektu do takiej nadperspektywy.
Z dokładnością do pojęć i terminologii takie rozwiązanie jest zastosowane w relacyjnych perspektywach opartych na trygerze instead of.
Składnia instrukcji tworzenia perspektywy
tworzenie perspektywy
Komentarz do składni
Składnia ta dotyczy momentu tworzenia nowej perspektywy.
Po utworzeniu perspektywa istnieje jako struktura danych, która może podlegać aktualizacjom za pomocą innej składni.
Nie będziemy tutaj zajmować się taką dodatkową składnią.
Słowa virtual objects, on_retrieve, on_update, on_delete, on_insert są zarezerwowane i identyczne dla wszystkich definicji perspektyw.
Każde z nich jest traktowane jako nazwa procedury, zaś każdy fragment definicji oznaczony takim słowem jest traktowany tak jak procedura.
W przypadku virtual objects jest to procedura funkcyjna zwracająca ziarna obiektów wirtualnych.
Każda procedura on_ retrieve, on_update, on_delete, on_insert może być pominięta, co oznacza, że dla definiowanych obiektów wirtualnych odpowiednia operacja jest niedozwolona.
Nazwy NazwaZarządczaPerspektywy, NazwaObiektówWirtualnych oraz nazwy parametrów procedur on_update i on_insert wybiera definiujący.
Dalsze elementy definicji perspektywy
Klasy obiektów wirtualnych. Jeżeli obiekty wirtualne potrzebują metod, wówczas należy je podłączyć do klasy.
Podłączenie perspektywy do klasy oznacza konieczność wprowadzenia specjalnej klauzuli. Jej wynikiem będzie to, że wraz z otwarciem sekcji zapisu aktywacyjnego na ENVS dla dowolnej z procedur przeciążających sekcja z binderami do wnętrza tej klasy oraz sekcje jej nadklas są wstawiane do ENVS.
Powiązania obiektów wirtualnych z innymi obiektami, zapamiętanymi lub wirtualnymi.
Może być konieczna specjalna składnia.
Pomocnicze procedury i funkcje, będące składnikiem definicji perspektywy.
Trwałe lub lokalne dane używane przez perspektywę.
Dane te są zapamiętane wewnątrz perspektywy na ogólnie przyjętych zasadach dla danych trwałych lub lokalnych danych sesji użytkownika.
Są one konieczne dla perspektyw ze stanem (stateful views, capacity-augmented views).
Poglądowy obraz definicji perspektywy

graf
pokaż animację


Podperspektywy
Zgodnie z zasadą relatywizmu semantycznego, każda podperspektywa jest z syntaktycznego, semantycznego i pragmatycznego punktu widzenia perspektywą, tj. ma podobną budowę i własności.
Liczba poziomów hierarchii perspektyw nie jest ograniczona.
Dla celów administracyjnych podperspektywy są identyfikowane jako obiekty podrzędne perspektywy w sposób specyficzny dla modelu M0.
Mechanizm podejścia stosowego musi podjąć odpowiednią akcję, jeżeli identyfikator wirtualny jest przetwarzany przez dowolny operator niealgebraiczny lub operator for each.
Zgodnie z podejściem stosowym w modelu składu M0, na identyfikatorze wykonywana jest funkcja nested; następnie jej rezultat jest wkładany na wierzchołek ENVS.
Dla modeli M1, M2, i M3 jest to dodatkowo powiązane z wkładaniem na stos ENVS sekcji z binderami do własności klas i/lub nadról.
Przetwarzanie identyfikatorów wirtualnych przez operatory niealgebraiczne
Jeżeli przetwarzany jest identyfikator wirtualny
<flagaJestemWirtualny, nazwaZarządcza, ziarno>
(lub <flagaJestemWirtualny, referencjaDoPerspektywy, ziarno>),
to na wierzchołek ENVS wkładana jest sekcja z nested(ziarno). Następnie wkładana jest na wierzchołek ENVS sekcja z binderami do wszystkich podperspektyw danej perspektywy.
W takiej sytuacji wewnętrzne procedury i dane nie są widoczne.
W ten sposób na wierzchołku ENVS będą bindery indukowane przez ziarno obiektu wirtualnego, co umożliwi definiującemu perspektywę odwołanie się do niego podczas definicji podperspektyw.
Bindery do wszystkich procedur oznaczonych virtual objects znajdujących się wewnątrz jej podperspektyw będą także obecne na stosie, co umożliwia ich użycie jako atrybutów obiektów wirtualnych.
W takiej sytuacji nie jest celowe wkładanie na stos ENVS binderów z nazwami zarządczymi podperspektyw.
Sytuacja na stosie ENVS
operator
Dzięki zastosowaniu stosu środowiskowego całość tego objaśnienia obowiązuje także podperspektywy.
Jeżeli perspektywa jest podłączona do klasy (w modelu M1), to na ENVS wkłada się także odpowiednio sekcję z binderami do jej własności oraz sekcje jej nadklas.
Podobnie z rolami w modelu M2 i z własnościami publicznymi/prywatnymi w modelu M3.
Wirtualny identyfikator dla podperspektyw
Dotychczasowa konstrukcja identyfikatora wirtualnego jest niewystarczająca dla podperspektyw.
Przy pisaniu procedur aktualizacyjnych dla podperspektywy programista może mieć potrzebę odwołania się do wszystkich jej nadperspektyw.
Identyfikator wirtualny jest jedynym sposobem zakomunikowania informacji o nad-perspektywach, co powoduje konieczność rozszerzenia go do następującej postaci:
operator                          gdzie referencjaDoPerspektywy_1 odnosi się do najbardziej zewnętrznej perspektywy, referencjaDoPerspektywy_2 odnosi się do jej podperspektywy itd.; referencjaDoPerspektywy_n odnosi się do aktualnie przetwarzanej perspektywy.
Przetwarzanie identyfikatora wirtualnego dla podperspektywy przez operator niealgebraiczny
stos
Wywołanie procedury aktualizującej podperspektywę
stos1
Przykłady perspektyw - schemat bazy danych (M0)
m0
Przykład 1: Aktualizacja nazwiska szefa
Perspektywa PracSzef dla wszystkich pracowników zwraca nazwisko pracownika (NazwPrac) i nazwisko szefa (NazwSzefa) jako stringi.
Podstawienie stringu na nazwisko szefa powoduje przeniesienie pracownika do działu, którego szef ma to nazwisko, które zostało użyte w podstawieniu.
Nie rozpatrujemy błędnego nazwiska szefa.
Usunięcie obiektu wirtualnego powoduje usunięcie odpowiedniego obiektu pracownika.
Zakładamy automatyczną aktualizację pointerów Zatrudnia bliźniaczych w stosunku do PracujeW.
Perspektywa zwraca tyle ziaren, ilu jest pracowników.
Każde ziarno ma postać bindera p(iPrac), gdzie iPrac jest referencją do obiektu Prac.
Przykład 1: Kod
kod
Przykład 1: zastosowania perspektywy
kod1
Przykład 1: komentarz
Powyższa perspektywa ilustruje sytuację zabronioną przez kryteria aktualizowalności perspektyw podane w literaturze.
Sytuacja taka jest także zabroniona w istniejących systemach komercyjnych, które nie zezwalają na aktualizację perspektyw powstałych w wyniku złączenia, jeżeli dotyczy ona atrybutu relacji znajdującej się po stronie klucza głównego w złączanych relacjach.
Nasz przykład jest całkowicie rozsądny, z jasną logiką biznesową.
Pokazujemy przez to, że wspomniane "kryteria aktualizowalności perspektyw" są nonsensem, konsekwencją błędnych założeń i spekulacyjnych teorii.
Przykład 2: Aktualizacja średniego zarobku
Perspektywa DziałŚrZar dotyczy działów zlokalizowanych w Radomiu i zwraca nazwę działu (Nazwa) i średnią zarobków (ŚrZar) pracowników w tym dziale.
Podstawienie na średnią zarobków powoduje podwyżkę zarobków pracowników w tym dziale proporcjonalną do ich aktualnych zarobków i do ich oceny wyrażonej w skali 0..10 (atrybut Ocena).
Przykład 2: Kod perspektywy
kod2
Przyklad 2: Podstawienie na średnią zarobków
Teraz oczywiście można podstawiać na średnią zarobków:
Podnieś o 200 średni zarobek w dziale "Lalki Barbie":
kod3
Przyklad 3: Ochrona danych poprzez zmylenie hakerów
Zdefiniujemy perspektywę MójDział z atrybutami NrD, Nazwa i Lokacja.
Zapytanie MójDział dla autoryzowanych użytkowników zwraca te same informacje, które zwraca zapytanie Dział.
Atrybut Lokacja jest zabezpieczony przed nieautoryzowanym dostępem (lokacje objęte są tajemnicą wojskową).
Zabezpieczenie polega na zmyleniu hakera próbującego dostać się do tej informacji.
Jeżeli dostęp jest nieautoryzowany, to nie zabraniamy go, ale perspektywa zwraca fałszywy rezultat, o czym haker nie wie
Przykład 3: kod perspektywy
kod4
Przykład 3: komentarz
Pokazujemy, że dzięki wprowadzonym przez nas perspektywom osoba definiująca perspektywę ma możliwość przejęcia pełnej kontroli nad wszystkim, co może zdarzyć się w stosunku do wirtualnych obiektów.
Kontrolować może nie tylko operacje aktualizacyjne, lecz dzięki operatorowi dereferencji (on_retrieve) może także kontrolować operacje wyszukiwawcze.
Zwykle taka funkcjonalność jest wiązana z regułami zdarzeniowymi (ECA, Event-Condition-Action), inaczej trygerami.
W ogólnym przypadku mechanizm trygerów jest trudny:
Zmusza do wprowadzania nowych bytów programistycznych, takich jak zdarzenia, bloki obsługi zdarzeń, rejestry zdarzeń itd.
Prowadzi do licznych opcji dodatkowych, m.in. związanych z przetwarzaniem transakcji.
Trygery nie mogą być ustawione na operacje wyszukiwawcze, czyli podany przez nas przykład jest w takich systemach nierealizowalny.
Te problemy nie występują w naszym podejściu.
Przykład 4: Przegląd pracowników (perspektywa ze stanem)
Szef firmy dokonuje okresowego przeglądu wszystkich pracowników. W tym celu ma perspektywę PracPrzegląd, która ma 4 atrybuty: Nazwisko, Opinia, Adnotacja i JużOceniony. Nazwisko i Opinia pochodzą z obiektu pracownika, natomiast atrybuty Adnotacja i JużOceniony są lokalne dla tej perspektywy.
Szef może podstawić na atrybutAdnotacja dowolny tekst, który może wielokrotnie zmieniać bez skutków dla bazy danych.
Każda osoba nowo przyjęta do pracy pojawi się automatycznie w tej perspektywie.
Podstawienie na atrybut JużOceniony wartości true oznacza usunięcie informacji na temat tego pracownika z perspektywy PracPrzegląd (bez usuwania z bazy danych).
Osoba ta nie pojawi się więcej w tej perspektywie, aż do "zresetowania" tej perspektywy np. przez administratora.
Jeżeli w międzyczasie szef zapełnił dla tego pracownika atrybut Adnotacja, wówczas znajdujący się tam tekst uzupełnia opinię o pracowniku oraz wysyłany jest email do szefa tego pracownika zawierający nazwisko pracownika oraz tekst adnotacji.
Perspektywa, po jej skompilowaniu, jest traktowana jako obiekt bazy danych. Wewnątrz zawiera dane pointerowe o nazwie Przejrzany, których wartością jest referencja do obiektów Prac (które wskutek tego nie pojawią się w perspektywie).
Przykład 4: kod
kod5
Przykład 4: użycie perspektywy
kod6
Optymalizacje
Jeżeli perspektywy używa się wyłącznie w wyszukiwaniu, to stosowną techniką jest modyfikacja zapytań (objaśniona w poprzednim semestrze).
Dla zapytań użytych w definicji perspektywy można oczywiście stosować dowolne zaimplementowane techniki optymalizacyjne (przepisywanie, indeksy).
Dla operacji aktualizaujących obiekty wirtualne konieczne jest wynalezienie nowych metod optymalizacyjnych, w szczególności takich, które identyfikator wirtualny zamienią na zwykły OID.
Porównanie z trygerami "instead of"
Trygery "instead of" działają tylko na relacyjnych bazach danych. Jest dość trudno stwierdzić, czy ta koncepcja jest rozszerzalna na inne medele danych. Nasze perspektywy są zdefiniowane dla dowolnego modelu danych.
Trygery "instead of" wymagają mechanizmu zdarzeniowego, który stanowi dodatkową komplikację środowiska programistycznego.
Nie jest jasny stopień algorytmicznej uniwersalności trygerów "instead of". W przypadku perspektyw nie ma ograniczeń uniwersalności.
W sumie jednak koncepcje te są dość zbliżone.