35
SQL – JDD (DDL) SQL – JDD (DDL) Język definicji danych Język definicji danych (Data (Data Definition Definition /Description /Description Language) Language)

SQL – JDD (DDL)

  • Upload
    helki

  • View
    61

  • Download
    0

Embed Size (px)

DESCRIPTION

SQL – JDD (DDL). Język definicji danych (Data Definition /Description Language). Elementy bazy danych. Tabele, perspektywy Dziedziny, typy Indeksy, sekwencje Schematy, użytkownicy, prawa Wyzwalacze i asercje Procedury użytkownika Katalog danych ( data dictionary ). Tabela. - PowerPoint PPT Presentation

Citation preview

Page 1: SQL – JDD (DDL)

SQL – JDD (DDL)SQL – JDD (DDL)

Język definicji danychJęzyk definicji danych

(Data Definition(Data Definition/Description/Description Language)Language)

Page 2: SQL – JDD (DDL)

26 marzec 200726 marzec 2007 SQL - język definicji danychSQL - język definicji danych 22

Elementy bazy danychElementy bazy danych

Tabele, perspektywyTabele, perspektywy Dziedziny, typyDziedziny, typy Indeksy, sekwencjeIndeksy, sekwencje Schematy, użytkownicy, prawaSchematy, użytkownicy, prawa Wyzwalacze i asercjeWyzwalacze i asercje Procedury użytkownikaProcedury użytkownika Katalog danych (Katalog danych (data dictionarydata dictionary))

Page 3: SQL – JDD (DDL)

26 marzec 200726 marzec 2007 SQL - język definicji danychSQL - język definicji danych 33

TabelaTabela

CREATE CREATE {TEMPORARY|TEMP} {TEMPORARY|TEMP} TABLE TABLE

nazwa tabelinazwa tabeli((kolumna1kolumna1 dziedzina1dziedzina1 [[DEFAULTDEFAULT wartosc_domyslna1wartosc_domyslna1] ]

[[wiezy_kolumny_wiezy_kolumny_11],],

kolumna2 dziedzina2kolumna2 dziedzina2 [[DEFAULTDEFAULT wartosc_domyslna2wartosc_domyslna2]]

[[więzywięzy__kolumnykolumny__22],...],...

[[więzywięzy__tabelitabeli],... ],... ))

Page 4: SQL – JDD (DDL)

26 marzec 200726 marzec 2007 SQL - język definicji danychSQL - język definicji danych 44

Dziedziny standardoweDziedziny standardowe

LogicznaLogiczna:: bool, boolean bool, boolean (TRUE, FALSE, UNKNOWN);(TRUE, FALSE, UNKNOWN); ZnakoweZnakowe: : char, char, char(char(nn) lub character() lub character(nn), varchar(), varchar(nn) lub character ) lub character

varying(varying(nn);); BitoweBitowe: bit(: bit(nn), bit varying(), bit varying(nn);); Liczowe dokładneLiczowe dokładne: int lub integer, shortint: int lub integer, shortint, , numeric(numeric(nn,,pp), ),

decimal(decimal(nn,,pp)),…,… Liczbowe zmiennopozycyjneLiczbowe zmiennopozycyjne: float(: float(pp), real, double), real, double…… Daty i czasuDaty i czasu: date, time, timestamp [WITH TIME ZONE]: date, time, timestamp [WITH TIME ZONE], ,

interval interval pp to to kk Duze obiektyDuze obiekty: text lub clob: text lub clob (varchar) (varchar), blob., blob. LicznikiLiczniki: SERIAL (: SERIAL (AUTO_INCREMENTAUTO_INCREMENT), CREATE SEQUENCE), CREATE SEQUENCE PPrzekształcanie typurzekształcanie typu: : CASTCAST((wartoscwartosc AS AS typtyp), ), wartoscwartosc::::typtyp, ,

typ wartosctyp wartosc, ,

Page 5: SQL – JDD (DDL)

26 marzec 200726 marzec 2007 SQL - język definicji danychSQL - język definicji danych 55

Więzy kolumnyWięzy kolumny

[[CONSTRAINTCONSTRAINT nazwa więzunazwa więzu]]NOT NULL |NOT NULL | NULL | NULL |DEFAULTDEFAULT wartość domyślnawartość domyślna | |PRIMARY KEYPRIMARY KEY | |UNIQUEUNIQUE | |CHECKCHECK ((warunekwarunek)) | |REFERENCESREFERENCES tabelatabela [( [(kolumnakolumna)])]

[[akcja refeakcja referencyjnarencyjna]][[integralność referintegralność referencyjnaencyjna] ]

[DEFERR[DEFERRABLEABLE | IMMEDIATE] | IMMEDIATE][INITIALLY IMMEDIATE | INITIALLY DEFERRED][INITIALLY IMMEDIATE | INITIALLY DEFERRED]

Page 6: SQL – JDD (DDL)

26 marzec 200726 marzec 2007 SQL - język definicji danychSQL - język definicji danych 66

Akcja Akcja referencyjnareferencyjna

ON { DELETE | UPDATE }ON { DELETE | UPDATE }

{ RESTRICT | { RESTRICT |

NO ACTION |NO ACTION |

CASCADE |CASCADE |

SET NULL |SET NULL |

SET DEFAULT }SET DEFAULT }

Page 7: SQL – JDD (DDL)

26 marzec 200726 marzec 2007 SQL - język definicji danychSQL - język definicji danych 77

Integralność Integralność referencyjnareferencyjna

DomyślnieDomyślnie – jeżeli jakaś kolumna klucza obcego – jeżeli jakaś kolumna klucza obcego jest pusta, to integralność referencyjna nie jest jest pusta, to integralność referencyjna nie jest kontrolowana;kontrolowana;

MATCH FULLMATCH FULL – jeśli wszystkie kolumny klucza – jeśli wszystkie kolumny klucza obcego są puste, to integralność referencyjna nie obcego są puste, to integralność referencyjna nie jest kontrolowana; przeciwnie – musi istnieć jest kontrolowana; przeciwnie – musi istnieć odpowiedni rekord w tabeli nadrzędnej;odpowiedni rekord w tabeli nadrzędnej;

MATCH PARTIALMATCH PARTIAL – rekord podrzędny pasuje do – rekord podrzędny pasuje do rekordu nadrzędnego, jeśli zgadza się z nim na rekordu nadrzędnego, jeśli zgadza się z nim na niepustych polach klucza obcego.niepustych polach klucza obcego.

Page 8: SQL – JDD (DDL)

26 marzec 200726 marzec 2007 SQL - język definicji danychSQL - język definicji danych 88

Więzy tabeliWięzy tabeli [CONSTRAINT <nazwa więzu>][CONSTRAINT <nazwa więzu>]

PRIMARY KEY (<lista kolumn>) |PRIMARY KEY (<lista kolumn>) |UNIQUE (<lista kolumn>) | UNIQUE (<lista kolumn>) | FOREIGN KEY (<lista kolumn>)FOREIGN KEY (<lista kolumn>)

REFERENCES REFERENCES <tabela>(<lista <tabela>(<lista kolumn>)kolumn>)

[<akcja referencyjna>][<integralność [<akcja referencyjna>][<integralność referencyjna>]| referencyjna>]|

CHECK <warunek>CHECK <warunek>[DEFERRED | IMMEDIATE][DEFERRED | IMMEDIATE]

Page 9: SQL – JDD (DDL)

26 marzec 200726 marzec 2007 SQL - język definicji danychSQL - język definicji danych 99

Więzy – moment kontroliWięzy – moment kontroli Spełnienie więzu może być kontrolowane Spełnienie więzu może być kontrolowane

natychmiast po wprowadzeniu, aktualizacji rekordu natychmiast po wprowadzeniu, aktualizacji rekordu z tabeli (IMMEDIATE);z tabeli (IMMEDIATE);

Może być jednak odroczone do momentu Może być jednak odroczone do momentu wypełnienia transakcji wypełnienia transakcji (DEFERRED);(DEFERRED);

Zmiany więzów nie muszą powodować kontroli Zmiany więzów nie muszą powodować kontroli całej aktualnej zawartości bazy danych pod kątem całej aktualnej zawartości bazy danych pod kątem ich poprawności (naruszenia więzów dla innych ich poprawności (naruszenia więzów dla innych rekordów, które zostały wcześniej wstawione do rekordów, które zostały wcześniej wstawione do bazy).bazy).

SET CONSTRAINTS {ALL|SET CONSTRAINTS {ALL|nazwanazwa,…} ,…}

{DEFERRED | IMMEDIATE}{DEFERRED | IMMEDIATE}

Page 10: SQL – JDD (DDL)

26 marzec 200726 marzec 2007 SQL - język definicji danychSQL - język definicji danych 1010

DziedzinaDziedzina użytkownikaużytkownika CREATE DOMAIN <CREATE DOMAIN <nazwanazwa> AS <dziedzina> AS <dziedzina__zdefzdefiniowanainiowana>>

[DEFAULT <wartość domyślna>][<więzy dziedzinowe>][DEFAULT <wartość domyślna>][<więzy dziedzinowe>] <wartość domyślna>::= <stała> | NULL | <f. bez arg.><wartość domyślna>::= <stała> | NULL | <f. bez arg.> <więzy dziedzinowe>::= [CONSTRAINT <nazwa więzu>]<więzy dziedzinowe>::= [CONSTRAINT <nazwa więzu>]

CHECK ( CHECK ( VALUEVALUE { {

IN (v1,v2,...,vk) | IN (v1,v2,...,vk) |

[[ISIS]] [[NOTNOT]] NULL | NULL |

<operator porównania> <wartość>| <operator porównania> <wartość>|

BETWEEN <w1> AND <w2>BETWEEN <w1> AND <w2>||

LIKE <wzorzec>|LIKE <wzorzec>|

IN (SELECT…)IN (SELECT…)

})})

Page 11: SQL – JDD (DDL)

26 marzec 200726 marzec 2007 SQL - język definicji danychSQL - język definicji danych 1111

Page 12: SQL – JDD (DDL)

26 marzec 200726 marzec 2007 SQL - język definicji danychSQL - język definicji danych 1212

PerspektywaPerspektywa (tabela (tabela wirtualna)wirtualna)

CREATE VIEW CREATE VIEW <nazwa perspektywy> [<nazwa kolumny>,...] <nazwa perspektywy> [<nazwa kolumny>,...]

ASAS

<zapytanie SELECT definiujące perspektywę><zapytanie SELECT definiujące perspektywę> [ WITH [CASCADED|LOCAL][ WITH [CASCADED|LOCAL]

CHECK OPTION]CHECK OPTION]

Page 13: SQL – JDD (DDL)

26 marzec 200726 marzec 2007 SQL - język definicji danychSQL - język definicji danych 1313

Perspektywa - Perspektywa - implementacjaimplementacja

Obliczanie wartości na żądanie – Obliczanie wartości na żądanie – znaczenie znaczenie analogiczne jak wyrażenie tabelowe w klauzuli FROManalogiczne jak wyrażenie tabelowe w klauzuli FROM

Perspektywa materializowanaPerspektywa materializowana – – zapytanie zapytanie definiujące perspektywę jest wyliczane i przechowywane definiujące perspektywę jest wyliczane i przechowywane jako tabela przez SZBD. Zapytania do perspektywy są jako tabela przez SZBD. Zapytania do perspektywy są realizowane przez wgląd w tę tabelę. Modyfikacje realizowane przez wgląd w tę tabelę. Modyfikacje perspektywy mogą być przeprowadzane przez:perspektywy mogą być przeprowadzane przez:

• ponowne obliczenie zapytania;ponowne obliczenie zapytania;

• aktualizację tylko tych rekordów, które dotknęła aktualizację tylko tych rekordów, które dotknęła modyfikacja.modyfikacja.

RozkładRozkład – – jest metodą polegającą na przekształceniu jest metodą polegającą na przekształceniu zapytania dotyczącego perspektywy tak, by dotyczyło tabel zapytania dotyczącego perspektywy tak, by dotyczyło tabel bazowych, a warunki wyboru pochodzące z definicji bazowych, a warunki wyboru pochodzące z definicji perspektywy zostały włączone w definicję tabeliperspektywy zostały włączone w definicję tabeli

Page 14: SQL – JDD (DDL)

26 marzec 200726 marzec 2007 SQL - język definicji danychSQL - język definicji danych 1414

Perspektywa – modyfikacje Perspektywa – modyfikacje danychdanych

Perspektywa jest modyfikowalnaPerspektywa jest modyfikowalna, gdy , gdy dotyczy jednej tabeli i występują w niej wszystkie dotyczy jednej tabeli i występują w niej wszystkie kolumny niepuste (z nałożonym warunkiem NOT kolumny niepuste (z nałożonym warunkiem NOT NULL lub PRIMARY KEY) z tej tabeli.NULL lub PRIMARY KEY) z tej tabeli.

Perspektywa może być modyfikowalnaPerspektywa może być modyfikowalna, gdy , gdy powstała z kilku tabel, ale występują w niej powstała z kilku tabel, ale występują w niej kolumny kluczy i kolumny niepuste z wszystkich kolumny kluczy i kolumny niepuste z wszystkich tabel, które są złączane w celu utworzenia tabel, które są złączane w celu utworzenia perspektywy. perspektywy.

Page 15: SQL – JDD (DDL)

26 marzec 200726 marzec 2007 SQL - język definicji danychSQL - język definicji danych 1515

Perspektywa – modyfikacje Perspektywa – modyfikacje danychdanych

Perspektywa nie może być modyfikowalnaPerspektywa nie może być modyfikowalna, , gdy:gdy:

zawiera operator DISTINCT;zawiera operator DISTINCT; zwraca kolumnę wyliczaną;zwraca kolumnę wyliczaną; jest definiowana przez zapytanie grupujące;jest definiowana przez zapytanie grupujące; jest definiowana przez zapytanie zawierające jest definiowana przez zapytanie zawierające

UNION, EXCEPT lub INTERSECT;UNION, EXCEPT lub INTERSECT; Modyfikacja może być niebezpieczna, gdy w Modyfikacja może być niebezpieczna, gdy w

warunku WHERE zapytania definiującego warunku WHERE zapytania definiującego występuje zapytanie zagnieżdżone odwołujące się występuje zapytanie zagnieżdżone odwołujące się do tabeli występującej w klauzuli FROM tego do tabeli występującej w klauzuli FROM tego zapytania, czyli warunek selekcji w perspektywie zapytania, czyli warunek selekcji w perspektywie jest zależny od aktualnej zawartości tabeli, na jest zależny od aktualnej zawartości tabeli, na bazie której jest zdefiniowana perspektywabazie której jest zdefiniowana perspektywa

Page 16: SQL – JDD (DDL)

26 marzec 200726 marzec 2007 SQL - język definicji danychSQL - język definicji danych 1616

Perspektywa – Perspektywa – WITH CHECK WITH CHECK OPTIONOPTION

WITH CHECK OPTIONWITH CHECK OPTION• rekord wstawiony poprzez perspektywę musi rekord wstawiony poprzez perspektywę musi

należeć do perspektywy;należeć do perspektywy;• rekord zmodyfikowany poprzez perspektywę rekord zmodyfikowany poprzez perspektywę

nadal musi należeć do perspektywy.nadal musi należeć do perspektywy. CASCADED – wstawienie lub modyfikacja rekordu CASCADED – wstawienie lub modyfikacja rekordu

do perspektywy lub perspektywy na jej podstawie do perspektywy lub perspektywy na jej podstawie zdefiniowanej, nie może spowodować zniknięcia zdefiniowanej, nie może spowodować zniknięcia rekordu z danej perspektywy;rekordu z danej perspektywy;

LOCAL – rekord może zniknąć po modyfikacji z LOCAL – rekord może zniknąć po modyfikacji z perspektywy, o ile zniknie z tabeli, na podstawie perspektywy, o ile zniknie z tabeli, na podstawie której jest zdefiniowana perspektywa.której jest zdefiniowana perspektywa.

Page 17: SQL – JDD (DDL)

26 marzec 200726 marzec 2007 SQL - język definicji danychSQL - język definicji danych 1717

IndeksyIndeksy

CREATE [UNIQUE] INDEX CREATE [UNIQUE] INDEX

<nazwa indeksu> ON<nazwa indeksu> ON

<nazwa tabeli> (<lista atrybutów>)<nazwa tabeli> (<lista atrybutów>)

[USING {[USING {

HASH |HASH |

BTREE |BTREE |

RTREE }] RTREE }]

Page 18: SQL – JDD (DDL)

26 marzec 200726 marzec 2007 SQL - język definicji danychSQL - język definicji danych 1818

SekwencjeSekwencje CREATE SEQUENCE <nazwa>CREATE SEQUENCE <nazwa> [INCREMENT <przyrost>] [INCREMENT <przyrost>] [START <wartoscPocz>] [START <wartoscPocz>] [MINVALUE <wartoscMin>][MINVALUE <wartoscMin>] [MAXVALUE <wartoscMaks>][MAXVALUE <wartoscMaks>] [CYCLE|NOCYCLE] [ORDER|NOORDER] …[CYCLE|NOCYCLE] [ORDER|NOORDER] …

Zastosowanie: Zastosowanie:

• nextvalnextval((‘sekw1’‘sekw1’); );

• setvalsetval((‘sekw1’‘sekw1’,,wartoscwartosc););

Page 19: SQL – JDD (DDL)

26 marzec 200726 marzec 2007 SQL - język definicji danychSQL - język definicji danych 1919

Zmiany w schemacie BDZmiany w schemacie BD

DROP – DROP – usunięcie danego obiektu (DOMAIN, TABLE, usunięcie danego obiektu (DOMAIN, TABLE, VIEW, INDEX, SEQUENCE) z opcją RESTRICT (domyślnie) lub VIEW, INDEX, SEQUENCE) z opcją RESTRICT (domyślnie) lub CASCADE;CASCADE;usunięcie z opcją RESTRICT nie powiedzie się, jeśli istnieją usunięcie z opcją RESTRICT nie powiedzie się, jeśli istnieją obiekty zależne od danego; z opcją CASCADE usuwamy obiekty zależne od danego; z opcją CASCADE usuwamy wszystkie obiekty zależne (kasujemy perspektywy, wszystkie obiekty zależne (kasujemy perspektywy, likwidujemy więzy klucza obcego odwołujące się do likwidujemy więzy klucza obcego odwołujące się do likwidowanej tabeli,…)likwidowanej tabeli,…)

ALTER – ALTER – modyfikacja definicji; możliwe operacje, to:modyfikacja definicji; możliwe operacje, to:

• [DROP | ADD ] COLUMN][DROP | ADD ] COLUMN]• [DROP | ADD ] CONSTRAINT[DROP | ADD ] CONSTRAINT• [DROP | SET ] [DEFAULT...][CHECK...][DROP | SET ] [DEFAULT...][CHECK...]

Page 20: SQL – JDD (DDL)

26 marzec 200726 marzec 2007 SQL - język definicji danychSQL - język definicji danych 2020

SchematySchematy i i użytkownicyużytkownicy CREATE USER CREATE USER nazwanazwa [CREATEDB | CREATEUSER | [CREATEDB | CREATEUSER |

IN GROUP IN GROUP nazwaGrupy nazwaGrupy ]]

CREATE GROUP CREATE GROUP nazwaGrupynazwaGrupy [ [opcje-jak-przy-opcje-jak-przy-uzytkownikuuzytkowniku]]

CREATE ROLE CREATE ROLE nazwaRolinazwaRoli [ [opcje-jak-przy-opcje-jak-przy-uzytkownikuuzytkowniku]]

CREATE SCHEMA [CREATE SCHEMA [nazwanazwa] [AUTHORIZATION ] [AUTHORIZATION uzytkownikuzytkownik]]

Ogólna nazwa obiektu b.d.:Ogólna nazwa obiektu b.d.:schemat.obiektschemat.obiekt

Page 21: SQL – JDD (DDL)

26 marzec 200726 marzec 2007 SQL - język definicji danychSQL - język definicji danych 2121

PrawaPrawa

Dowolny SZBD powinien zapewniać również Dowolny SZBD powinien zapewniać również poufność naszych danych oraz możliwość poufność naszych danych oraz możliwość regulowania oraz limitowania dostępu do danych. regulowania oraz limitowania dostępu do danych. Dlatego w SQL-u zdefiniowano tzw. prawa, które Dlatego w SQL-u zdefiniowano tzw. prawa, które właściciel obiektu może dać (GRANT) lub odebrać właściciel obiektu może dać (GRANT) lub odebrać (REVOKE) innym użytkownikom. Istnieje też (REVOKE) innym użytkownikom. Istnieje też możliwość przekazania otrzymanych wcześniej możliwość przekazania otrzymanych wcześniej praw (GRANT OPTION).praw (GRANT OPTION).

UWAGA: użytkownik ma pełne prawa do obiektów, UWAGA: użytkownik ma pełne prawa do obiektów, które utworzył; tych praw nie można mu odebrać które utworzył; tych praw nie można mu odebrać (sam też nie może się pozbyć prawa usuwania i (sam też nie może się pozbyć prawa usuwania i modyfikowania swoich obiektów).modyfikowania swoich obiektów).

Page 22: SQL – JDD (DDL)

26 marzec 200726 marzec 2007 SQL - język definicji danychSQL - język definicji danych 2222

Składnia do nadawania prawSkładnia do nadawania praw

GRANT GRANT prawaprawa ON ON element-bazy-danychelement-bazy-danych TO TO lista-użytkowników lista-użytkowników [WITH GRANT OPTION][WITH GRANT OPTION]

Prawa, które można nadać to:Prawa, które można nadać to: dla tabel, perspektyw: SELECT, INSERT, DELETE, UPDATE, dla tabel, perspektyw: SELECT, INSERT, DELETE, UPDATE,

REFERENCES;REFERENCES; dla indeksów, dziedzin, sekwencji, funkcji: USAGE, UPDATE, dla indeksów, dziedzin, sekwencji, funkcji: USAGE, UPDATE,

EXECUTE;EXECUTE; REFERENCES dotyczy możliwości odwołania się do danej struktury REFERENCES dotyczy możliwości odwołania się do danej struktury

w więzach integralności (np. asercje,więzy integralności w więzach integralności (np. asercje,więzy integralności referencyjnej); USAGE odnosi się do dziedzin i elementów referencyjnej); USAGE odnosi się do dziedzin i elementów schematu innych niż relacje; użytkownik definiujący perspektywę schematu innych niż relacje; użytkownik definiujący perspektywę musi mieć prawo SELECT do tabel, do których odwołuje się w musi mieć prawo SELECT do tabel, do których odwołuje się w perspektywie;perspektywie;

można także nadać wszystkie prawa (ALL [PRIVILEGES]) lub prawa można także nadać wszystkie prawa (ALL [PRIVILEGES]) lub prawa wszystkim użytkownikom (PUBLIC).wszystkim użytkownikom (PUBLIC).

Page 23: SQL – JDD (DDL)

26 marzec 200726 marzec 2007 SQL - język definicji danychSQL - język definicji danych 2323

Przykłady nadawania prawPrzykłady nadawania praw

rootroot: GRANT REFERENCES(: GRANT REFERENCES(idoido), SELECT ON ), SELECT ON osobaosoba TO TO mariuszmariusz; ; - - potrzebne by mariusz mógł stworzyć poniższe: perspektywę potrzebne by mariusz mógł stworzyć poniższe: perspektywę (SELECT) i tabelę (REFERENCES)(SELECT) i tabelę (REFERENCES)

mariuszmariusz: CREATE VIEW : CREATE VIEW absolwenciabsolwenci AS AS

SELECT * FROM SELECT * FROM osobaosoba WHERE WHERE katokato=‘abs’;=‘abs’;

mariuszmariusz: CREATE TABLE : CREATE TABLE moi_koledzymoi_koledzy

((identident INT REFERENCES INT REFERENCES osobaosoba,,

adresadres VARCHAR, VARCHAR, teltel VARCHAR(20)); VARCHAR(20));

rootroot: GRANT SELECT, INSERT ON : GRANT SELECT, INSERT ON osobaosoba TO TO mariuszmariusz

WITH GRANT OPTION;WITH GRANT OPTION;

mariuszmariusz: GRANT SELECT ON : GRANT SELECT ON absolwenciabsolwenci TO PUBLIC; TO PUBLIC;

rootroot: GRANT USAGE ON DOMAIN : GRANT USAGE ON DOMAIN imionaimiona TO TO jacekjacek, , placekplacek WITH GRANT OPTION;WITH GRANT OPTION;

Page 24: SQL – JDD (DDL)

26 marzec 200726 marzec 2007 SQL - język definicji danychSQL - język definicji danych 2424

Składnia REVOKESkładnia REVOKE

Odbieranie nadanych wcześniej praw Odbieranie nadanych wcześniej praw (innych niż GRANT) (innych niż GRANT) REVOKE REVOKE prawaprawa ON ON element-bazy-danych element-bazy-danych

FROM FROM lista-użytkowników lista-użytkowników [CASCADE|[CASCADE|RESTRICT];RESTRICT];

Odbieranie prawa GRANTOdbieranie prawa GRANTREVOKE GRANT OPTION FOR REVOKE GRANT OPTION FOR prawaprawa ON ON

element-bazy-danychelement-bazy-danych FROM FROM lista- lista- użytkownikówużytkowników

[CASCADE|RESTRICT][CASCADE|RESTRICT]

Page 25: SQL – JDD (DDL)

26 marzec 200726 marzec 2007 SQL - język definicji danychSQL - język definicji danych 2525

REVOKEREVOKE Podobne jak w przypadku GRANT w zdaniu REVOKE mogą Podobne jak w przypadku GRANT w zdaniu REVOKE mogą

wystąpić ALL PRIVILEGES oraz PUBLIC.wystąpić ALL PRIVILEGES oraz PUBLIC.

Prawa są „autoryzowane” - jeśli ktoś otrzymał takie samo prawo Prawa są „autoryzowane” - jeśli ktoś otrzymał takie samo prawo od wielu użytkowników to odebranie praw przez jednego od wielu użytkowników to odebranie praw przez jednego użytkownika nie powoduje odebrania tego prawa przyznanego użytkownika nie powoduje odebrania tego prawa przyznanego przez innych użytkowników (czyli dopiero, gdy wszystkie osoby przez innych użytkowników (czyli dopiero, gdy wszystkie osoby odbiorą to prawo zostanie ono utracone)odbiorą to prawo zostanie ono utracone)

Jeśli użytkownik przekazał prawo, które uzyskał z klauzulą GRANT Jeśli użytkownik przekazał prawo, które uzyskał z klauzulą GRANT OPTION, to odebranie mu tej opcji powoduje, że prawo, które OPTION, to odebranie mu tej opcji powoduje, że prawo, które przekazał innym, jest im odbierane.przekazał innym, jest im odbierane.

Prawo trzeba „odbierać” tą samą drogą, jaką było nadane – Prawo trzeba „odbierać” tą samą drogą, jaką było nadane – jeśli A jeśli A nadał prawo X użytkownikowi B WITH GRANT OPTION, a B nadał to nadał prawo X użytkownikowi B WITH GRANT OPTION, a B nadał to prawo C, to A nie może odebrać prawa bezpośrednio C (REVOKE X prawo C, to A nie może odebrać prawa bezpośrednio C (REVOKE X FROM C) – musi odebrać „GRANT OPTION” użytkownikowi B (z FROM C) – musi odebrać „GRANT OPTION” użytkownikowi B (z klauzulą CASCADE), a to spowoduje odebranie prawa X klauzulą CASCADE), a to spowoduje odebranie prawa X użytkownikowiużytkownikowi C. C.

Page 26: SQL – JDD (DDL)

26 marzec 200726 marzec 2007 SQL - język definicji danychSQL - język definicji danych 2626

REVOKEREVOKE

rootroot:GRANT INSERT ON :GRANT INSERT ON osobaosoba TO TO mariuszmariusz WITH GRANT OPTION; WITH GRANT OPTION;

mariuszmariusz: GRANT INSERT ON : GRANT INSERT ON osobaosoba TO TO januszjanusz;;

rootroot: REVOKE INSERT ON : REVOKE INSERT ON osobaosoba FROM FROM januszjanusz; -> ; -> janusz ma nadal prawo, bo janusz ma nadal prawo, bo nadał je mariusznadał je mariusz

rootroot: GRANT SELECT ON : GRANT SELECT ON przedmiotprzedmiot TO TO mariuszmariusz, , januszjanusz WITH GRANT OPTION; WITH GRANT OPTION;

mariuszmariusz: GRANT SELECT ON : GRANT SELECT ON przedmiotprzedmiot TO TO januszjanusz;;

rootroot: REVOKE SELECT ON : REVOKE SELECT ON przedmiotprzedmiot FROM FROM januszjanusz; -> ; -> janusz ma nadal prawo janusz ma nadal prawo SELECT – to od mariuszaSELECT – to od mariusza

rootroot: REVOKE GRANT OPTION FOR SELECT ON : REVOKE GRANT OPTION FOR SELECT ON przedmiotprzedmiot FROM FROM mariuszmariusz [CASCADE]; -> [CASCADE]; -> janusz traci prawo przekazania prawa SELECT – próba janusz traci prawo przekazania prawa SELECT – próba odebrania tego prawa bez CASCADE spowoduje ostrzeżenie (ale nie odebrania tego prawa bez CASCADE spowoduje ostrzeżenie (ale nie powiedzie się), z opcją CASCADE prawo zostanie odebrane;powiedzie się), z opcją CASCADE prawo zostanie odebrane;

mariuszmariusz: REVOKE SELECT ON : REVOKE SELECT ON przedmiotprzedmiot FROM FROM januszjanusz; -> ; -> janusz nie ma już janusz nie ma już prawa SELECT;prawa SELECT;

Page 27: SQL – JDD (DDL)

26 marzec 200726 marzec 2007 SQL - język definicji danychSQL - język definicji danych 2727

Więzy ogólne, czyli Więzy ogólne, czyli asercjeasercje

Dotychczas poznane więzy dotyczyły pojedynczej Dotychczas poznane więzy dotyczyły pojedynczej krotki (CHECK dla kolumny i/lub tabeli), klucza krotki (CHECK dla kolumny i/lub tabeli), klucza głównego (PRIMARY KEY) i alternatywnego głównego (PRIMARY KEY) i alternatywnego (UNIQUE, NOT NULL) oraz ewentualnie prostych (UNIQUE, NOT NULL) oraz ewentualnie prostych związków między krotkami z różnych relacji związków między krotkami z różnych relacji (FOREIGN KEY…REFERENCES). Czasami (FOREIGN KEY…REFERENCES). Czasami chcielibyśmy zapewnić przestrzeganie warunku, chcielibyśmy zapewnić przestrzeganie warunku, który dotyczy całej relacji lub paru relacji.który dotyczy całej relacji lub paru relacji.

Próba zapisania takiego warunku w definicji jednej z Próba zapisania takiego warunku w definicji jednej z relacji może nie dać zamierzonego efektu – relacji może nie dać zamierzonego efektu – warunek taki jest sprawdzany przy okazji operacji warunek taki jest sprawdzany przy okazji operacji na tej relacji, a nie na innych.na tej relacji, a nie na innych.

Page 28: SQL – JDD (DDL)

26 marzec 200726 marzec 2007 SQL - język definicji danychSQL - język definicji danych 2828

Składnia asercjiSkładnia asercji

CREATE ASSERTION CREATE ASSERTION nazwa_asercji nazwa_asercji CHECK (CHECK (warunekwarunek))

gdzie gdzie warunekwarunek musi być typu logicznego, np. musi być typu logicznego, np.

NOT EXISTS (SELECT * FROM NOT EXISTS (SELECT * FROM zapiszapis WHERE WHERE idoido IN (SELECT IN (SELECT idoido FROM FROM osobaosoba WHERE WHERE katokato=‘abs’)=‘abs’)

3< ALL(SELECT COUNT(*) FROM (((3< ALL(SELECT COUNT(*) FROM (((przedmiotprzedmiot NATURAL JOIN NATURAL JOIN edycjaedycja) JOIN ) JOIN semsem ON ON idsids==semestrsemestr) JOIN ) JOIN kategoriakategoria ON ( ON (idkidk==typtyp))))WHERE WHERE semsem..nazwanazwa LIKE ‘%letni 2006%’ AND LIKE ‘%letni 2006%’ AND kategoria.nazwakategoria.nazwa=‘kurs’)=‘kurs’)

Inne przykłady warunków:Inne przykłady warunków: do żadnej grupy nie może być zapisanych więcej studentów, niż liczba do żadnej grupy nie może być zapisanych więcej studentów, niż liczba

podana w polu limit;podana w polu limit; wykład obowiązkowy musi prowadzić profesor (moglibyśmy go wykład obowiązkowy musi prowadzić profesor (moglibyśmy go

weryfikować, gdybyśmy mieli w bazie tytuły);weryfikować, gdybyśmy mieli w bazie tytuły); aby zapisać się na przedmiot X, trzeba mieć wcześniejszy wpis na aby zapisać się na przedmiot X, trzeba mieć wcześniejszy wpis na

przedmiot Y;przedmiot Y;

Page 29: SQL – JDD (DDL)

26 marzec 200726 marzec 2007 SQL - język definicji danychSQL - język definicji danych 2929

Wyzwalacze (TRIGGERS)Wyzwalacze (TRIGGERS)

Czasami chcielibyśmy reagować w bardziej aktywny sposób na Czasami chcielibyśmy reagować w bardziej aktywny sposób na sytuacje, gdy dochodzi do naruszenia jakiegoś warunku lub sytuacje, gdy dochodzi do naruszenia jakiegoś warunku lub niezmiennika niż tylko nie dopuszczając do tych modyfikacji niezmiennika niż tylko nie dopuszczając do tych modyfikacji bazy danych, która ten warunek narusza (być może dla bazy danych, która ten warunek narusza (być może dla pewnych sytuacji umiemy temu zaradzić). Poza tym pewnych sytuacji umiemy temu zaradzić). Poza tym czasami to my chcielibyśmy decydować, kiedy warunek ma czasami to my chcielibyśmy decydować, kiedy warunek ma być sprawdzany (choćby ze względu na wydajność), a w być sprawdzany (choćby ze względu na wydajność), a w przypadku np. asercji to system o tym decyduje.przypadku np. asercji to system o tym decyduje.

Poza tym asercje są „drogie”, więc w praktyce nie istnieją. Poza tym asercje są „drogie”, więc w praktyce nie istnieją. Dlatego firmy zaoferowały coś „tańszego” od asercji, co Dlatego firmy zaoferowały coś „tańszego” od asercji, co pozwala nam na kontrolowanie poprawności danych w pozwala nam na kontrolowanie poprawności danych w bazie w pewnych sytuacjach.bazie w pewnych sytuacjach.

Page 30: SQL – JDD (DDL)

26 marzec 200726 marzec 2007 SQL - język definicji danychSQL - język definicji danych 3030

Cechy wyzwalaczyCechy wyzwalaczy Wyzwalacze (potrzeba ich użycia) są testowane tylko przy zajściu Wyzwalacze (potrzeba ich użycia) są testowane tylko przy zajściu

zdarzenia (wstawienie, usunięcie, modyfikacja krotki) określonego przez zdarzenia (wstawienie, usunięcie, modyfikacja krotki) określonego przez programistęprogramistę (projektanta bazy) (w przypadku asercji i więzów krotkowych (projektanta bazy) (w przypadku asercji i więzów krotkowych decyduje o tym SZBD).decyduje o tym SZBD).

Warunek jest testowany w chwili zajścia zdarzenia.Warunek jest testowany w chwili zajścia zdarzenia. Jeśli zachodzi warunek opisany w wyzwalaczu, to wykonywana jest akcja Jeśli zachodzi warunek opisany w wyzwalaczu, to wykonywana jest akcja

związania z wyzwalaczem, której zadaniem jest przygotowanie bazy do związania z wyzwalaczem, której zadaniem jest przygotowanie bazy do zmian wywołanych zdarzeniem lub uzupełnienie tych zmian tak, by baza zmian wywołanych zdarzeniem lub uzupełnienie tych zmian tak, by baza po nich pozostawała w poprawnym stanie.po nich pozostawała w poprawnym stanie.

W akcji wyzwalacza mogą być zawarte zdarzenia, z którymi są związane W akcji wyzwalacza mogą być zawarte zdarzenia, z którymi są związane ich własne wyzwalacze. Są one uruchamiane zarówno w trakcie ich własne wyzwalacze. Są one uruchamiane zarówno w trakcie bezpośredniego wywołania zdarzenia w SQL, jak i wówczas, gdy bezpośredniego wywołania zdarzenia w SQL, jak i wówczas, gdy wydarzenie to zostało wywołane np. przez inny wyzwalacz.wydarzenie to zostało wywołane np. przez inny wyzwalacz.

Zdarzenie i akcja wyzwalacza stanowią jedną transakcję – gdy coś się nie Zdarzenie i akcja wyzwalacza stanowią jedną transakcję – gdy coś się nie powiedzie w trakcie akcji wyzwalacza, to wycofywana jest cała operacja (aż powiedzie w trakcie akcji wyzwalacza, to wycofywana jest cała operacja (aż do początku całej transakcji, czyli zdarzenia, które jako pierwsze do początku całej transakcji, czyli zdarzenia, które jako pierwsze uruchomiło wyzwalacz).uruchomiło wyzwalacz).

Page 31: SQL – JDD (DDL)

26 marzec 200726 marzec 2007 SQL - język definicji danychSQL - język definicji danych 3131

Składnia wyzwalaczySkładnia wyzwalaczy

CREATE TRIGGER CREATE TRIGGER nazwa_wyzwalaczanazwa_wyzwalacza{BEFORE|INSTEAD OF |AFTER} {BEFORE|INSTEAD OF |AFTER} {UPDATE [OF {UPDATE [OF nazwa_kolumnynazwa_kolumny] | INSERT | DELETE} ON ] | INSERT | DELETE} ON

nazwa_tabelinazwa_tabeliREFERENCINGREFERENCING{OLD|OLD TABLE} AS {OLD|OLD TABLE} AS nazwa_zmiennej1nazwa_zmiennej1{NEW|NEW TABLE} AS {NEW|NEW TABLE} AS nazwa_zmiennej2nazwa_zmiennej2WHEN (WHEN (warunekwarunek))lista_poleceń_SQL_do_wykonanialista_poleceń_SQL_do_wykonania ////akcjaakcja[FOR [EACH] {ROW|STATEMENT}][FOR [EACH] {ROW|STATEMENT}]

UWAGA: W miejscu klauzul „REFERENCING… WHEN... lista_poleceń” UWAGA: W miejscu klauzul „REFERENCING… WHEN... lista_poleceń” może wystąpić wywołanie procedury „EXECUTE PROCEDURE”, w może wystąpić wywołanie procedury „EXECUTE PROCEDURE”, w której wykonywane są analogiczne operacje.której wykonywane są analogiczne operacje.

Page 32: SQL – JDD (DDL)

26 marzec 200726 marzec 2007 SQL - język definicji danychSQL - język definicji danych 3232

Cechy wyzwalaczyCechy wyzwalaczy Akcja może być wykonana przed (BEFORE), po (AFTER) lub Akcja może być wykonana przed (BEFORE), po (AFTER) lub

zamiast (INSTEAD OF) zdarzeniazamiast (INSTEAD OF) zdarzenia Można określać czy akcja ma być wykonywana dla każdej Można określać czy akcja ma być wykonywana dla każdej

modyfikowanej krotki (FOR EACH ROW) czy tylko raz dla modyfikowanej krotki (FOR EACH ROW) czy tylko raz dla wszystkich krotek zmodyfikowanych w pojedynczej operacji wszystkich krotek zmodyfikowanych w pojedynczej operacji (FOR EACH SENTENCE, czyli domyślnie);(FOR EACH SENTENCE, czyli domyślnie);

W akcji dostępne są wartości sprzed (OLD, OLD TABLE) W akcji dostępne są wartości sprzed (OLD, OLD TABLE) zajścia zdarzenia jak i nowe (NEW,NEW TABLE) wartości; zajścia zdarzenia jak i nowe (NEW,NEW TABLE) wartości; • OLD i OLD TABLE mają sens dla DELETE i UPDATE, a NEW i OLD i OLD TABLE mają sens dla DELETE i UPDATE, a NEW i

NEW TABLE dla UPDATE i INSERT;NEW TABLE dla UPDATE i INSERT;

• OLD TABLE i NEW TABLE mają sens dla FOR EACH SENTENCE, OLD TABLE i NEW TABLE mają sens dla FOR EACH SENTENCE, a OLD i NEW dla FOR EACH ROW.a OLD i NEW dla FOR EACH ROW.

Akcja jest wykonywana tylko wtedy, gdy spełniony jest Akcja jest wykonywana tylko wtedy, gdy spełniony jest warunek z klauzuli WHEN.warunek z klauzuli WHEN.

Page 33: SQL – JDD (DDL)

26 marzec 200726 marzec 2007 SQL - język definicji danychSQL - język definicji danych 3333

Przykład wyzwalaczaPrzykład wyzwalacza

Uniemożliwienie zapisu ponad limit do Uniemożliwienie zapisu ponad limit do grupy:grupy:

CREATE TRIGGER CREATE TRIGGER PilnujLimituPrzyZapisiePilnujLimituPrzyZapisieAFTER INSERT ON AFTER INSERT ON zapiszapisREFERENCING NEW AS REFERENCING NEW AS nowanowaWHEN ((SELECT WHEN ((SELECT limitlimit FROM FROM grupagrupa WHERE WHERE

idgidg==nowanowa..idgidg)<(SELECT COUNT(*) FROM )<(SELECT COUNT(*) FROM zapiszapis WHERE WHERE idgidg==nowa.idgnowa.idg))))

DELETE FROM DELETE FROM zapiszapis WHERE WHERE idgidg==nowa.idgnowa.idg AND AND idoido==nowa.idonowa.ido

FOR EACH ROWFOR EACH ROW

Page 34: SQL – JDD (DDL)

26 marzec 200726 marzec 2007 SQL - język definicji danychSQL - język definicji danych 3434

Inny przykład wyzwalaczaInny przykład wyzwalacza

Uniemożliwienie zapisu ponad limit do grupy (cd.) – konieczne Uniemożliwienie zapisu ponad limit do grupy (cd.) – konieczne jest także zareagowanie, gdy ktoś zechce obniżyć limit jest także zareagowanie, gdy ktoś zechce obniżyć limit poniżej liczby aktualnie zapisanych w grupie osób:poniżej liczby aktualnie zapisanych w grupie osób:

CREATE TRIGGER CREATE TRIGGER PilnujLimituPrzyGrupiePilnujLimituPrzyGrupieAFTER UPDATE OF AFTER UPDATE OF limitlimit ON ON grupagrupaREFERENCING NEW AS REFERENCING NEW AS nowanowaREFERENCING OLD AS REFERENCING OLD AS starastaraWHEN (WHEN (stara.limitstara.limit>>nowa.limitnowa.limit AND EXISTS AND EXISTS

(SELECT (SELECT grupa.idggrupa.idg FROM FROM zapiszapis NATURAL JOIN NATURAL JOIN grupagrupa GROUP BY GROUP BY grupa.idggrupa.idg HAVING COUNT(*)> HAVING COUNT(*)>limitlimit))

UPDATE UPDATE grupagrupa SET SET limitlimit==stara.limitstara.limit WHERE WHERE idgidg==stara.idgstara.idgFOR EACH ROWFOR EACH ROW

Page 35: SQL – JDD (DDL)

26 marzec 200726 marzec 2007 SQL - język definicji danychSQL - język definicji danych 3535