Click here to load reader

Wykład 22.04.2004

  • View
    33

  • Download
    0

Embed Size (px)

DESCRIPTION

Wykład 22.04.2004. Asercje, wyzwalacze i prawa. Elementy aktywne bazy. - PowerPoint PPT Presentation

Text of Wykład 22.04.2004

  • Wykad 22.04.2004Asercje, wyzwalacze i prawa

  • Elementy aktywne bazy Chcielibymy, aby baza danych zapewniaa nam pewne wasnoci lub niezmienniki. Chcielibymy mie moliwo zapisania tych wasnoci do schematu bazy a baza powinna sama zapewnia, e cay czas bd spenione. Te elementy schematu, ktre nam te wasnoci zapewniaj mona okreli jako elementy aktywne.Do elementw aktywnych zaliczamy:

  • Elementy aktywne bazy cd. 1Klucze (primery key,unique)Integralno referencyjn i klucze obce (foreign key)Wizy wartoci atrybutwWizy NOT-NULLWizy checkWizy dziedziny

  • Elementy aktywne bazy cd. 2Wizy globalneWizy checkdeklarowanie wizw dla pojedynczej relacjicheck ()Asercje (assertion)Wyzwalacze (triggers)

  • AsercjePo co nam asercje? Wszystkie dotychczasowe wizy dotyczyy pojedynczej krotki (wizy wartoci atrybutw), ewentualnie prostych zwizkw midzy krotkami z rnych relacji (wizy integralnoci) a my czasami chcielibymy napisa warunek, ktry dotyczy caej relacji lub paru relacji.Czasami taki warunek daoby si napisa uywajc wizw check dotyczcych relacji zapisanych w schematach relacji, ktrych ten warunek dotyczy, jednak przy bardziej

  • Asercjeskomplikowanych warunkach zapisanie takiego samego warunku uywajc samych wizw check moe by bardziej pracochonne oraz znacznie atwiej popeni bd w wyniku ktrego baza nie bdzie speniaa warunkw, ktre wg. nas powinna spenia. Co wicej niektrych warunkw nie da si w ten sposb zapisa. Wynika to np. z rnic midzy asercjami a wizami krotkowymi dotyczcymi sprawdzania, kiedy s spenione warunki ktrych dotycza.

  • Skadnia asercjiCREATE ASSERTION CHECK ()Gdzie musi by typu logicznegoPrzykadPrzyjmijmy, e mamy w bazie nastpujce relacje:Dyrektor(nazwisko:varchar(10),adres:varchar(10),cert:varchar(10),cenaSieci:int)Studio(nazwa:varchar(10),adres:varchar(10),prezC:varchar (10) references Dyrektor(cert))I chcielibymy, aby szefem studia bya osoba, ktrej sie ma warto co najmniej 10 mln $

  • AsercjeAsercja opisujca ten warunek moe wyglda nastpujco:CREATE ASSERTION BogatyPrez CHECK(NOT EXISTS(SELECT *FROM Studio,DyrektorWHERE prezC=cert AND cenaSieci
  • AsercjeZauwamy, e gdybymy chcieli zdefiniowa to samo uywajc tylko wizw krotkowych i napisalibymy nastpujco definicj tabeli Studio:CREATE TABLE Studio (nazwa CHAR(30) PRIMARY KEY,adres VARCHAR(255),prezC INT REFERENCES Dyrektor(cert), CHECK (prezC NOT IN (SELECT cert FROM DyrektorWHERE cenaSieci
  • Asercjeto (co na pocztku moe budzi due zdziwienie) nie uzyskamy tego samego efektu co przy pomocy asercji.Dzieje si tak poniewa warunek, ktry jest opisany w wizie krotkowym, bdzie sprawdzany przy wstawianiu i modyfikacji krotki tylko z relacji Studio. Przy zmianach w relacji Dyrektor wizy krotkowe w relacji Studio nie bd sprawdzane.

  • Porwnanie krotkowych check i asercji

  • AsercjeTak wic jeli uczynimy kogo prezesem studia a potem bdziemy chcieli obniy warto jego sieci to asercja na to nie pozwoli natomiast wiz krotkowy tak, poniewa on jest sprawdzany przy modyfikacji krotki z relacji Studio a nie krotki z relacji Prezes.DLACZEGO: poniewa wizy krotkowe powinny dotyczy krotek z danej relacji a w tej relacji nic si nie zmienio. Ten sposb traktowania wizw krotkowych wynika gwnie z wymogw wydajnociowych! Wyobramy sobie, jak prac musiaaby wykona baza, gdyby musiaa zapewni wiele wizw krotkowych podobnych temu.

  • AsercjeUWAGA NA MARGINESIE: mona w bazie wymusi spenienie warunku opisanego w asercji uywajc tylko wizw krotkowych. Trzeba po prostu doda odpowiedni wiz do relacji Prezes (atwe wiczenie ).INNY PRZYKAD.Mamy relacj:Film(tytu:varchar(10),rok:date,dugo:int,czyKolor:boolean,nazwaStudia:varchar(10),producentC:varchar(10));I chcielibymy, aby dugo wszystkich filmw w danym studiu miaa co najmniej 10000 minut.

  • AsercjeAsercja wyglda nastpujco:CREATE ASSERTION SumDlugo CHECK (10000
  • Po co wyzwalacze?Czasami chcielibymy reagowa w bardziej aktywny sposb na sytuacje, gdy dochodzi do naruszenia jakiego warunku lub niezmiennika ni tylko nie dopuszczajc do tych modyfikacji bazy danych, ktra ten warunek narusza (by moe dla pewnych sytuacji umiemy temu zaradzi). Poza tym czasami to my chcielibymy decydowa, kiedy warunek ma by sprawdzany (choby ze wzgldu na wydajno), a w przypadku np. asercji to system o tym decyduje. Poza tym asercje s drogie. Dlatego chcielibymy mie co taszego od asercji, co pozwala nam na nakadanie pewnych wizw na baz.

  • Cechy wyzwalaczyWyzwalacze s testowane tylko przy zajciu okrelonego zdarzenia (doczanie, usuwanie, modyfikacja krotki) okrelonego przez programist (projektanta bazy) (w przypadku asercji i wizw krotkowych decyduje o tym SZBD)Testuj warunek w chwili zajcia zdarzenia (a nie uprzedzaj go)Jeli warunek zostanie speniony to przetwarzana jest akcja zwizania z wyzwalaczem

  • Skadnia wyzwalaczyCREATE TRIGGER {BEFORE|INSTEAD OF |AFTER}[OF ] ON REFERENCING{OLD|OLD_TABLE} AS nazwa_zmiennej1{NEW|NEW_TABLE} AS nazwa_zmiennej2WHEN () //akcja[FOR EACH ROW]

  • Cechy wyzwalaczyAkcja moe by wykonana przed (BEFORE), po (AFTER) lub zamiast (INSTEAD OF) zdarzeniaW akcji dostpne s wartoci sprzed (OLD, OLD_TABLE) zajcia zdarzenia jak i nowe (NEW,NEW_TABLE) wartociMona okrela czy akcja ma by wykonywana dla kadej modyfikowanej krotki (FOR EACH ROW) czy tylko raz dla wszystkich krotek zmodyfikowanych w pojedynczej operacji

  • Przykad wyzwalaczaUniemoliwienie obnienie ceny sieci:CREATE TRIGGER CenaSieciWyzwAFTER UPDATE OF cenaSieci ON DyrektorREFERENCING OLD AS StaraNEW AS NowaWHEN (Stara.cenaSieci > Nowa.cenaSieci)UPDATE Dyrektor SET cenaSieci= Stara.cenaSieci WHERE cert = Nowa.certFOR EACH ROW

  • Inny przykad wyzwalaczaZabronienie spadku redniej ceny sieci poniej 500000CREATE TRIGGER WyzwalaczSrCenySieciINSTEAD OF UPDATE OF cena sieci ON DyrektorREFERENCINGOLD_TABLE AS StaraNEW_TABLE AS NowaWHEN (500000
  • Prawa Dowolny SZBD powinien zapewnia rwnie poufno naszych danych oraz moliwo regulowania oraz limitowania dostpu do danych. Dlatego w SQL-u zdefiniowano tzw. prawa, ktre waciciel obiektu moe da (GRANT) lub odebra (REVOKE) innym uytkownikom. Istnieje te moliwo przekazania otrzymanych wczeniej praw.UWAGA: uytkownicy, s tworzeniu przed DBA i s oni wacicielami obiektw ktre stworzyli (czyli podobnie jak np. w unix-owym systemie plikw).

  • Skadnia do nadawania prawGRANT ON TO [WITH GRANT OPTION]Prawa, ktre mona nada to: SELECT, INSERT, DELETE, UPDATE, REFERENCES,USAGE (mona te ALL PRIVILEGES)REFERENCES dotyczy moliwoci odwoania si do danej struktury w wizach integralnoci (np. asercje,wizy integralnoci referencyjnej).USAGE nadaje si dla dziedzin i innych elementw schematu innych ni relacje i asercje.

  • Skadnia GRANTALL PRIVILEGES skrt, dziki ktremu mona przekaza wszystkie prawa, ktre posiada si wzgldem danego obiektu.W miejsce nazwy uytkownik mona rwnie uy sowa PUBLIC. Wtedy przekae si prawa wszystkim uytkownikom w bazie danych (obecnym w chwili nadawania praw jak i tym, ktrzy zostan stworzeni pnej).

  • Przykady nadawania prawGRANT SELECT,INSERT ON Studio TO mariusz WITH GRANT OPTION;GRANT REFERENCES(nazwa), DELETE ON Studio TO mariusz;GRANT USAGE ON DOMAIN Imiona TO jacek,placek WITH GRANT OPTION;

  • Skadnia REVOKEOdbieranie nadanych wczeniej praw (innych ni GRANT)REVOKE ON FROM [CASCADE|RESTRICT];Odbieranie prawa GRANTREVOKE GRANT OPTION FOR ON FROM [CASCADE|RESTRICT]

  • PrawaSemantyka CASCADE i RESTRICT w zdaniu REVOKE jest identyczna jak ich semantyka w zdaniu DROP TABLE.PRZYKADY:REVOKE SELECT, INSERT ON Studio FROM mariusz CASCADE;REVOKE GRANT OPTION FOR DELETE ON Studio FROM mariusz RESTRICT;

  • REVOKEPodobne jak w przypadku GRANT w zdaniu REVOKE mog wystpi ALL PRIVILEGES oraz PUBLICJeli kto otrzyma takie samo prawo od wielu uytkownikw to odebranie praw przez jednego uytkownika nie powoduje odebrania tego prawa przyznanego przez innych uytkownikw (czyli dopiero, gdy wszystkie osoby odbior to prawo zostanie ono utracone)

  • REVOKEPo wykonaniu nastpujcego cigu instrukcji:GRANT INSERT ON Film TO mariusz;GRANT INSERT(tytul) ON Film TO mariusz;REVOKE INSERT ON Film FROM mariusz;uytkownik mariusz nadal posiada prawo INSERT(tytul) ON Film, poniewa odebranie praw oglniejszych nie zabiera podzbioru tych praw nadanego osobnym poleceniem.

  • Diagram GRANTRootINSERT ONFilm **

    MariuszINSERT ONFilmMariuszINSERT ONFilm(Tytu)

  • REVOKEPo wykonaniu nastpujcego cigu instrukcji:Root: GRANT INSERT ON Film TO mariusz WITH GRANT OPTION;Mariusz: GRANT INSERT ON Film TO jacek;Root:REVOKE GRANT OPTION FOR INSERT ON Film FROM mariusz CASCADE;uytkownik mariusz nadal posiada prawo INSERT ON Film, nie posiada ju jednak prawa GRANT. Uytkownik jacek nie posiada ju natomiast prawa INSERT ON Film (poniewa zostao mu one nadane przez mariusz dziki prawu GRANT, ktrego zosta on potem pozbawiony).

  • Diagramy GRANTRootINSERT ONFilm **JacekINSERT ONFilmMariuszINSERT ON Film *MariuszINSERT ONFilm