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ę

Podobne dokumenty