Wykład 5
Transkrypt
Wykład 5
Bazy danych 2 Wykład 5 Structured Query Language (SQL) c.d. DDL Dziedzina (DOMAIN) Dziedzina to zdefiniowany przez uŜytkownika zbiór dopuszczalnych wartości definiowany niezaleŜnie od definicji tabel Składnia CREATE DOMAIN NazwaDziedziny [AS] TypDanych [[NOT] NULL] [DEFAULT wartość_domyślna] [CHECK (warunek_selekcji)] Warunek selekcji moŜe odnosić się do innej tabeli Do zmiany nazwy dziedziny uŜywamy polecenia ALTER DOMAIN o składni ALTER DOMAIN NazwaDziedziny RENAME NowaNazwa Dziedzinę usuwamy poleceniem DROP DOMAIN NazwaDziedziny [RESTRICT|CASCADE] Dziedzina (DOMAIN) Przykłład1 CREATE DOMAIN Płłeć ć AS CHAR NOT NULL DEFAULT 'M' CHECK (VALUE IN ('M', 'K')); Przykłład 2 CREATE DOMAIN NumerBiura AS CHAR(4) NULL CHECK (VALUE IN (SELECT biuroNr FROM Biuro)); Tworzenie tabeli (CREATE TABLE) CREATE TABLE [ właściciel.]NazwaTabeli ( { definicja kolumny[,....]} [ograniczenie dla tabeli[, ...]) definicja kolumny : nazwa_kolumny typ_danych [ [ NOT ] NULL ] [UNIQUE] [ DEFAULT wartość_domyślna ] [ ograniczenie dla kolumny [... ]] ograniczenie dla tabeli: [ CONSTRAINT nazwa_ograniczenia ] {UNIQUE ( nazwa_kolumny[, ...] ) | PRIMARY KEY ( nazwa_kolumny1[, ... ]) | CHECK ( warunek ) | ograniczenie klucza obcego} ograniczenie dla kolumny : [ CONSTRAINT nazwa_ograniczenia ] { PRIMARY KEY | REFERENCES NazwaTabeli [( nazwa_kolumny ) ] [ akcja ] } | CHECK ( warunek ) ograniczenie klucza obcego FOREIGN KEY [(nazwa_kolumny[, ...] ) ] REFERENCES NazwaTabeli [(nazwa_kolumny[, ... ]) ] [akcja] [ CHECK ON COMMIT] akcja : ON { UPDATE | DELETE }{ CASCADE | SET NULL | SET DEFAULT | RESTRICT } Więzy integralności NO ACTION lub RESTRICT - uniemoŜliwia usunięcie (modyfikację) krotki z relacji nadrzędnej jeśli występują jakiekolwiek krotki od niej zaleŜne. CASCADE – usunięcie (modyfikacja) krotki nadrzędnej pociąga za sobą usunięcie (modyfikację) wszystkich związanych z nią krotek podrzędnych; jeśli krotka podrzędna pełni rolę nadrzędną w innym związku, analogiczna operacja usuwania (modyfikacji) powinna być wykonana dla krotek podrzędnych tego związku. SET NULL – usunięcie krotki nadrzędnej pociąga za soną automatyczne nadanie wartości pustych odpowiednim kluczom obcym wszystkich krotek SET DEFAULT – usunięcie krotki nadrzędnej pociąga za soną automatyczne nadanie wartości domyślnych odpowiednim kluczom obcym wszystkich krotek podrzędnych. Tworzenie tabeli (CREATE TABLE) Przykłład 1. RównowaŜ Ŝne sformułłowania CREATE TABLE Product ( product_num INTEGER PRIMARY KEY); CREATE TABLE Product ( product_num INTEGER, PRIMARY KEY ( product_num ) Przykłład 2 Nieokreś ślona kolumna w klauzuli FOREIGN KEY CREATE TABLE library_books ( isbn CHAR(20) PRIMARY KEY, copyright_date DATE, title CHAR(100), author CHAR(50), FOREIGN KEY location REFERENCES room) Tworzenie tabeli (CREATE TABLE) Przykłład 3. CREATE TABLE Orders ( order_num INTEGER NOT NULL PRIMARY KEY, date_ordered DATE, name CHAR(80)); CREATE TABLE Order_item ( order_num item_num INTEGER NOT NULL, SMALLINT NOT NULL CHECK(item_num<100), PRIMARY KEY (order_num, item_num), FOREIGN KEY (order_num) REFERENCES Orders (order_num) ON DELETE CASCADE) Tworzenie tabeli (CREATE TABLE) Przykłład 4. CREATE TABLE borrowed_book ( date_borrowed DATE NOT NULL DEFAULT CURRENT DATE, date_returned DATE, book CHAR(20) REFERENCES library_books (isbn), PRIMARY KEY (book), CONSTRAINT GoodDate CHECK( date_returned >= date_borrowed )); Modyfikacja tabeli (ALTER TABLE) Polecenie ALTER TABLE pozwala zmienić strukture tabeli, która została utworzona Składnia ISO zawiera sześć opcji dodanie nowej koumny do tabeli usunięcie kolumny z tabeli dodanie nowych więzów tabeli usunięcie więzów tabeli ustalenie wartości domyślnej dla kolumny usunięcie wartości domyślnej kolumny zmiana nazwy tabeli, kolumny i reguły Modyfikacja tabeli (ALTER TABLE) Składnia: ALTER TABLE NazwaTabeli [ADD [COLUMN] {definicja kolumny}] [DROP [COUMN] NazwaKolumny [RESTRICT|CASCADE] [ADD [CONSTRAINT [nazwa_ograniczenia]] ograniczenie dla tabeli] [DROP CONSTRAINT nazwa_ograniczenia [RESTRICT|CASCADE] [ALTER NazwaKolumny modyfikacja_kolumny] [ALTER nazwa_ograniczenia CHECK ( nowy_warunek ) modyfikacja kolumny : SET DEFAULT wartość domyślna | DROP DEFAULT | ADD [ CONSTRAINT ] nazwa_ograniczenia CHECK ( warunek ) | DROP CONSTRAINT nazwa_ograniczenia Modyfikacja tabeli (ALTER TABLE) Przykłład 1. ALTER TABLE employee ADD office CHAR(20) DEFAULT 'Boston' Przykład 2. ALTER TABLE employee DELETE office Przykład 3. ALTER TABLE customer ADD sales_contact INTEGER REFERENCES employee (emp_id) ON UPDATE CASCADE ON DELETE SET NULL Modyfikacja tabeli (ALTER TABLE) Przykłład 4. ALTER TABLE Personel ALTER stanowisko DROP DEFAULT Przykład 5. ALTER TABLE Personel ALTER płeć SET DEFAULT K' Przykład 6. ALTER TABLE Nieruchomość DROP CONSTRAINT PracownikNadzorującyNieZaDuŜo Usuwanie tabeli (DROP TABLE) Usuwamy tabelę pleceniem DROP TABLE Składnia DROP TABLE NazwaTabeli [RESTRICT|CASCADE] Polecenie DROP TABLE usuwa tabelę wraz z wszystkimi wierszami, jeŜeli chemy tylko usunąć wiersze stosujemy polecenie DELETE Tworzenie indeksów (CREATE INDEX) Indeks jest struktura przyspieszającą wyszukiwanie wierszy w tabeli Składnia CREATE [ UNIQUE ] INDEX nazwa_indeksu ON NazwaTabeli ( NazwaKolumny [ ASC | DESC ] [, ...]) Jeśli w poleceniu występuje klauzula UNIQUE system będzie kontrolował unikalność wartości kolumny czy kolumn, według których jest tworzony indeks Najlepiej jest tworzyć unikalne indeksy w momencie tworzenia tabeli Przykłład 1. CREATE INDEX employee_name_index ON employee ( emp_lname ASC, emp_fname DESC ) Usuwamy indeks poleceniem DROP INDEKS nazwa_indeksu Wybór indeksów Wskazówki dotyczące tworzenia „listy poŜądanych indeksów” NaleŜy utworzyć indeks dla klucza głównego (jeśli nie robi tego BDMS) Jeśli często występują odwołania do klucza obcego, warto utworzyć dla niego indeks (jeśli nie robi tego BDMS). NaleŜy utworzyć indeks pomocniczy dla kolumn, które nie są kluczami głównymi ani kluczami obcymi, ale mogą być uŜywane w złoŜonych powiązaniach NaleŜy utworzyć indeksy pomocnicze dla atrybutów intensywnie wykorzystywanych w: Kryteriach selekcji ORDER BY GROUP BY Innych operacjach wymagających sortowania Wybór indeksów Wskazówki dotyczące tworzenia „listy poŜądanych indeksów” Nie naleŜy indeksować małych relacji NaleŜy unikać indeksowania często modyfikowanego atrybutu bądź relacji Nie jest wskazane indeksowanie atrybutu słuŜącego realizacji zapytań, których wynikiem jest istotna frakcja krotek w relacji (>25%) NaleŜy unikać indeksowania atrybutów składających się z długich łańcuchów Wybór indeksów Z utrzymywaniem i uŜywaniem indeksów wiąŜe się dodatkowy koszt, na który składa się m.in.: Koszt dodania nowego rekordu indeksowego do kaŜdego indeksu pomocniczego przy kaŜdym dodaniu krotki do relacji; Koszt modyfikacji indeksów pomocniczych wynikający z odpowiednich modyfikacji krotek w relacji; Wzrost rozmiaru pamięci dyskowej; MoŜliwość obniŜenia wydajności na etapie optymalizacji zapytań, będąca wynikiem rozwaŜania przez optymalizator uŜycia kaŜdego z indeksów Przy dodawaniu indeksów pomocniczych naleŜy rozwaŜyć, czy ten dodatkowy koszt zostanie zrekompensowany poprzez uzyskaną dzięki indeksowi poprawę wydajności. Perspektywy (VIEW) Perspektywy tworzymy poleceniem CREATE VIEW Składnia CREATE VIEW nazwa_perspektywy [ ( column-name [, ...] ) ] AS zapytanie_Select [ WITH CHECK OPTION ] Przykłład 1. Perspektywa pozioma CREATE VIEW PersonelBiura3 AS SELECT * FROM Personel WHERE biuroNr='003'; Przykłład 2. Perspektywa pionowa CREATE VIEW Pesonel3 AS SELECT prcownikNr, imię ę, nazwisko, stanowisko, płłeć ć FROM PersonelBiura3 Perspektywy (VIEW) Przykłład 3. Perspektywa grupują ąca i perspektywa złą łączenia łą CREATE VIEW LiczbaNieruchomoś ściPracownika (biuroNr, pracownikNr, liczba) AS SELECT p.biuroNr, p.pracownikNr, COUNT(*) FROM Personel p, Nieruchomość ść d WHERE p.pracownikNr=d.pracownikNr GROUP BY p.biuroNr, p.pracownikNr; Usuwanie perspektywy wykonujemy za pomocą polecenia DROP VIEW Składnia DROP VIEW nazwa_perspektywy [RESTRICT|CASCADE] Modyfikowanie danych poprzez perspektywy (VIEW) Standard ISO nakłada kilka ograniczań na moŜliwość definiowania i wykorzystywania perspektyw. Nie wolno wykonywać złączenia perspektywy grupującej z tabelą bazową lub inna perspektywą JeŜeli kolumna perspektywy jest wyliczana jako funkcja agregująca, to nazwa takiej kolumny moŜe pojawić sie tylko w klauzulach SELECT lub ORDER BY zapytań wykorzystujących tę perspektywę. Przykłład 4. błędna formuła SELECT COUNT(liczba) FROM LiczbaNieruchomoś ściPracownika Przykłład 5. błę łędna formułła łę SELECT * FROM LiczbaNIeruchomoś ściPracownika WHERE liczba>2 Modyfikowanie danych poprzez perspektywy (VIEW) Istnieje moŜliwość dokonywania modyfikacji danych poprzez perspektywy Standard ISO stwierdza, Ŝe perspektywa jest modyfikowalna wtedy i tylko wtedy gdy: Wiersz dodany poprzez perspektywę musi spełniać więzy integralności tabeli bazowej Nie występuje w niej opcja DISTINCT, czyli w wyniku zapytania nie są usuwane powtórzenia wierszy KaŜdy element na liście SELECT zapytania definiującego perspektywę jest nazwa kolumny (a nie stalą, wyraŜeniem, czy funkcją agregującą) i Ŝadna kolumna nie występuje więcej niŜ jeden raz. W klauzuli FROM jest określona tylko jedna tabela, czyli istnieje tylko jedna tabela źródłowa dla perspektywy - w ten sposób wykluczone są perspektywy oparte na złączeniach, czy sumie UNION W zapytaniu definiującym perspektywy nie występuje klauzula GROUP BY Klauzula WHERE nie zawiera Ŝadnego zagnieŜdŜonego podzapytania SELECT, w którym występuje odwołanie do tabeli znajdującej się na liście FROM Klauzula WITH CHECK OPTION Klauzula WITH CHECK OPTION gwarantuje, Ŝe wiersze, które nie spełniają warunku WHERE zapytania definiującego, nie mogą być dodane poprzez perspektywę do tabeli (tzw. wiersze migrujące) Przyakłład 6: CREATE VIEW PersonelBiura3 UPDATE PersonelBiura3 AS SELECT * SET biuroNr=‘B005’ FROM Personel WHERE pracownikNr=‘SG37’ WHERE biuroNr='003‘ WITH CHECK OPTION; Wady i zalety perspektyw Zalety perspektyw NiezaleŜność danych – perspektywa moŜe reprezentować spójny i niezmienny obraz struktury bazy danych pomimo zmian dokonywanych w tabelach bazowych (pomimo dodawania i usuwania kolumn, zmiany związków, dzielenia tablic, zmiany ich struktury i nazwy) Poprawa bezpieczeństwa – kaŜdy uŜytkownik moŜe otrzymać uprawnienia do bazy danych poprzez niewielki zbiór perspektyw, które zawierają potrzebne mu dane Uproszczenie zapytań Dostosowanie do uŜytkownika Integralność danych – klauzula WITH CHECK OPTION Wady i zalety perspektyw Wady perspektyw Ograniczona moŜliwość modyfikacji – pewnych danych nie moŜna modyfikować poprzez perspektywy Ograniczenia struktury – jeśli tworzona była perspektywa ze wszystkich kolumn tabeli i dodaliśmy nowe kolumny, to nie będą one występowały w perspektywie Wydajność – korzystanie z perspektyw moŜe spowodowac spadek wydajności Mechanizmy bezpieczeństwa (GRANT) Mechanizm bezpieczeństwa jest oparty na takich elementach jak: Identyfikatory uŜytkowników Prawa własności Prawa dostępu Administrator bazy danych (DBA) – wyróŜniony uŜytkownik DBA ma moŜliwość tworzenia nowych uŜytkowników KaŜde polecnie SQL wykonywane jest w imieniu pewnego uŜykownika KąŜdy obiekt stworzony w DBMS ma swojego włłaś ściciela – jest on jedyną osoba, która i ma do niego pełny dostęp Identyfikator uŜytkownika jest wykorzystywany do określenia, do jakich obiektów bazy danych uŜytkownik ma dostęp i jakie operacje moŜe na nich wykonywać Mechanizmy bezpieczeństwa (GRANT) Osoba z uprawnieniami administratora bazy danych moŜe tworzyć uŜytkowników oraz grupy uŜytkowników Tworzenie uŜytkowników i grup odbywa się w następujący sposób Skłładnia: GRANT CONNECT TO nazwa_uŜykownika [,…] IDENTIFIED BY password [,…] gdzie nazwa_uŜytkownika jest teŜ nazwą grupy, której będzie moŜna nadać uprawnienia podobnie jak uŜytkownikowi Administrator moŜe następnie nadać utworzonemu uŜytkownikowi uprawnienia DBA, RESOURCES, GROUP Skłładnia GRANT {DBA | RESOURCE | GROUP} TO nazwa_uŜytkownika [,…] Mechanizmy bezpieczeństwa (GRANT) Aby utworzyć grupę musimy utworzonemu uŜytkownikowi, który ma być grupą, nadać uprawnienia grupy Skłładnia: GRANT GROUP, TO nazwa_uŜytkownika [,…] Następnie moŜemy przypisać uŜytkowników do grupy Skłładnia: GRANT MEMBERSHIP IN GROUP nazwa_grupy [, …] TO nazwa_uŜytkownika [,…] Prawa dostępu (GRANT) Prawa dostępu do tabel opisane w standardzie ISO to: SELECT - umoŜliwia odczyt danych MoŜe być limitowany do kolumn INSERT - umoŜliwia dodawanie wierszy do tabeli UPDATE - umoŜliwia modyfikację danych MoŜe być limitowany do kolumn DELETE - umoŜliwia usuwanie wierszy z tabeli ALTER - umoŜliwia wydanie polecenia ALTER TABLE REFERENCES - umoŜliwia dodawanie kluczy obcych i indeksów Polecenia zmiany struktury tabeli! MoŜe być limitowany do kolumn ALL PRIVILLEGES - daje uprawnienia do wszystkich powyŜszych operacji Prawa dostępu (GRANT) UŜytkownik, który tworzy tabelę staje sie jej właścicielem i uzyskuje do niej pełny dostęp UŜytkownik, który tworzy pespektywę staje sie jej właścicielem, ale niekoniecznie posiada do niej pełne prawa - prawa INSERT, UPDATE i DELETE do perspektywy jej właściciel uzyskuje tylko wtedy gdy posiada odpowiednie prawa do tabel występujących w perspektywie Składnia GRANT {ALL [ PRIVILEGES ], ALTER, DELETE, INSERT, REFERENCES [ ( nazwa_kolumny [, ... ]) ], SELECT [ ( nazwa_kolumny [, ...] ) ], UPDATE [ ( nazwa_kolumny [, ...] ) ]} ON NazwaTabeli TO {nazwa_uŜytkownika [, ...]|PUBLIC} [ WITH GRANT OPTION ] Klauzula WITH GRANT OPTION pozwala zbywać uzyskane prawo innym uŜytkownikom Prawa dostępu (GRANT) Prawa dostępu moga byc przekazywane przez: DBA Właściciela tabeli UŜytkowników z opcją WITH GRANT OPTION UŜytkownik będący członkami grupy dziedziczą tylko i wyłącznie prawa dostępu do tabel, ale nie dziedziczą praw DBA, RESOURCE, GROUP UWAGA: Grupa moŜe tworzyć tabelę jeśli ma uprawnienia co najmniej RESOURCE – logując się nazwą_uŜytkownika będącego nazwą grupy Prawa dostępu (GRANT) Prawa dostępu do tabel odbierane są poleceniem REVOKE Skłładnia REVOKE [GRANT OPTION FOR]{lista_praw|ALL[PRIVILEGES]} ON NazwaTabeli FROM {lista_identyfikatorów_uŜytkowników|PUBLIC} [RESTRICT] [CASCADE] Inne uprawnienia mogą być usuwane przez administratora za pomocą polecenia Skłładnia REVOKE specialne_uprawnienia [,…] FROM userid [,…] Gdzie specialne_uprawnienia CONNECT | DBA | GROUP | MEMBERSHIP IN GROUP userid , . . . | RESOURCE Prawa dostępu (GRANT) UŜytkownicy mogą tworzyć procedury składowane (o tym później). UŜytkownik moŜe wykonywać taką procedurę o ile ma do niej uprawnienia. Prawo wykonywania procedury nadawane jest poleceniem GRANT Skłładnia GRANT EXECUTE ON procedure_name TO nazwa_uŜytkownika [,…] Prawo wykonywania procedury odbierane jest poleceniem REVOKE Skłładnia REVOKE EXECUTEON procedure-name FROM userid [,…] Dziękuję za uwagę