BD-1st-2.4-lab8.tresc-1.1-Slajd17
Perspektywy weryfikujące ograniczenia
Rozważmy następującą perspektywę:
CREATE VIEW
prac_minimum (id, nazwisko, placa, etat)
AS SELECT id_prac, nazwisko, placa_pod, etat
FROM pracownicy WHERE placa_pod < 1000;
Perspektywa udostępnia wszystkich pracowników zarabiających poniżej 1000 złotych. Ponieważ jest to perspektywa prosta, która udostępnia klucz podstawowy relacji bazowej, jest to perspektywa modyfikowalna. Zastanówmy się co się stanie, jeżeli zostanie wykonane następujące polecenie:
INSERT INTO prac_minimum (id, nazwisko, placa, etat) VALUES (300,’Zielinski’,2000,’PROFESOR’);
Ponieważ perspektywa PRAC_MINIMUM jest modyfikowalna wstawienie krotki uda się, jednak późniejsze wykonanie zapytania do tej perspektywy wykaże, że nowa krotka się w niej nie pojawiła. Nie ma w tym nic dziwnego, ponieważ krotka ta nie spełnia warunku selekcji zapytania definiującego perspektywę. Podobny efekt można uzyskać modyfikując płacę pracowników widocznych poprzez perspektywę. Jeżeli podniesiemy pracownikom płacę powyżej 1000 zł to ci pracownicy znikną z perspektywy. Oczywiście, ich krotki nie są naprawdę usuwane z bazy danych, ale nie spełniają już warunku selekcji zapytania w perspektywie. Aby zapobiec takim sytuacjom, możliwe jest nakazanie SZBD, aby nie pozwalał na wykonywanie operacji INSERT i UPDATE, które spowodują, że jakaś krotka znika z perspektywy. Można to zrobić dopisując słowa kluczowe WITH CHECK OPTION na końcu definicji perspektywy tak, jak pokazano to na przykładzie (1). Próba wstawienia krotki do perspektywy tworzonej przez polecenie na przykładzie (1), która nie spełnia warunku placa_pod<1000 zakończy się błędem. Na przykładzie (2) pokazano polecenie tworzące perspektywę, która udostępnia dane dotyczące pracowników, którzy zarabiają powyżej 3000 i są profesorami, oraz pracowników, którzy zarabiają poniżej 2000 i są asystentami. Próba wstawienia do perspektywy pracownika, który nie spełnia tego ograniczenia zakończy się błędem.