Wyklad5 2005

background image

Wyk

ład

5

background image

SQL – język relacyjnych

i obiektowo-relacyjnych

baz danych

Zaawansowane cechy

background image

Perspektywy

• Perspektywa jest zapamiętaną w bazie

danych definicja zapytania do
późniejszego użycia:

• Perspektywa jest “wirtualną” tabelą,

• można ją używać tak jak tabelę,
• jej wiersze nie są przechowywane w

bazie danych,

• mogą być wyliczone na żądanie.

CREATE VIEW Urzędnicy (Empno,
Ename, Sal)
AS SELECT Empno, Ename, Sal
FROM Emp
WHERE Job = 'CLERK';

background image

Perspektywy

• Perspektywy służą do dostosowania bazy

danych do potrzeb różnych grup
użytkowników:

• stanowią “perspektywę” z jakiej dana

klasa użytkowników “widzi” bazę
danych;

• różne grupy użytkowników mogą

mieć odmienne perspektywy na te
same dane
w bazie danych.

• Na perspektywach możliwe jest

wykonywanie instrukcji SELECT,
INSERT, DELETE i UPDATE podobnie
jak na tabelach.

background image

Używając tej perspektywy możemy
przeprowadzać modyfikację danych w
odniesieniu do pracowników z działu numer 20
np. możemy podnieść ich zarobki (Sal) o 10%:

Przykład

CREATE VIEW Prac_sprzedaży
AS SELECT * FROM Emp
WHERE Deptno= 20;

UPDATE
Prac_sprzedaży
SET Sal = Sal * 1.1;

background image

Ograniczenia w Standardzie

SQL dla

modyfikowalnych perspektyw

•w klauzuli SELECT nie ma DISTINCT,
•w klauzuli FROM jest tylko jedna nazwa tabeli

lub jedna
nazwa perspektywy - spełniająca definiowane
kryteria,

•na liście SELECT są tylko nazwy kolumn,
•w klauzuli WHERE nie ma podzapytania,
•nie ma klauzul GROUP BY i HAVING.

Powyższe punkty stanowią warunek
dostateczny na to,
aby jednoznacznie był określony wiersz w
tabeli,
której dotyczy zmiana.

background image

Modyfikowalne perspektywy

zawierające złączenia (Oracle)

W Oracle można dokonywać zmian tylko po
stronie klucza obcego, np. w tabeli Emp ale nie
Dept:  

CREATE VIEW PracD AS
SELECT Empno, Ename, p.Deptno, Dname,
Loc
FROM Emp p, Dept d
WHERE p.Deptno= d.Deptno;

 
INSERT INTO PracD(Empno, Ename,
Deptno)
VALUES (5600, 'Nowiński',20);

wstawia pracownika “Nowiński” do tabeli Emp,
ustalając
jego numer działu na 20 (Dname i Loc są
nieistotne
przy wstawianiu).

background image

Tworzenie perspektywy z opcją

sprawdzania

Opcja

WITH CHECK OPTION

powoduje, że przy

INSERT

i

UPDATE

następuje sprawdzenie, czy wstawiany

bądź modyfikowany wiersz spełnia warunek
określony w klauzuli WHERE:

• jeśli spełnia, operacja jest wykonywana;
• jeśli nie spełnia, operacja nie zostanie
wykonana

.

CREATE VIEW
nazwa_perspektywy[(nazwa_kolumny,...)]
AS podzapytanie
WITH CHECK OPTION;

background image

Poprzez tę perspektywę nie uda się zmiana
wysokości zarobków pracownika o nazwisku
‘Kowalski’, jeśli jego Zarobki są równe

0

lub

Null

.

Przykład

CREATE VIEW
Emp_na_urlopie_bezpłatnym AS
SELECT *
FROM Emp
WHERE Sal = 0 OR Sal IS NULL
WITH CHECK OPTION;

UPDATE
Emp_na_urlopie_bezpłatnym
SET Sal = 10000
WHERE Ename = 'KOWALSKI';

Perspektywa pracowników będących na urlopie
bezpłatnym

background image

Perspektywy tylko do odczytu

Zabezpieczenie przed dokonywaniem zmian przez

perspektywę.

 

CREATE VIEW Pracownicy AS
SELECT * FROM Emp
WITH READ ONLY;

 

Każdy uprawniony użytkownik:

• może oglądać dane o pracownikach,
• nie może wykonywać wstawiania, modyfikowania

ani usuwania wierszy.

background image

Podsumowanie perspektyw

• Perspektywy udostępnia się konkretnym grupom

użytkowników.

• Określają widok na bazę danych zaprojektowany

dla tej grupy użytkowników.

• Ułatwia to użycie danych.
• Stanowi element ochrony przed niepowołanym

lub nieprawidłowym dostępem do danych.

• Każdy użytkownik bazy danych ma dostęp

tylko
do danych dotyczących jego działalności w
firmie.

background image

Tworzenie synonimów nazw

tabel i perspektyw

W przypadku długich identyfikatorów obiektów (np.
specyfikacje sieciowe) – własne synonimy.

 

CREATE SYNONYM

nazwa_synonimu

FOR

nazwa_tabeli_lub_perspektywy

;

 

CREATE SYNONYM Dept
FOR Kadry.Dept@mojafirma.com.pl;
 

DROP SYNONYM

nazwa_synonimu

;

background image

Transakcje

• Często elementarną operacją na bazie danych nie

jest wcale pojedyncza instrukcja SQL, ale ciąg
takich instrukcji, nazywany transakcją.

• Np. przelanie pieniędzy z jednego konta na drugie

jest elementarną operacją z punktu widzenia
aplikacji bankowej.

• W SQL używamy w tym celu co najmniej dwóch

instrukcji UPDATE:

UPDATE Konta SET Saldo = Saldo – 1000 WHERE Id_klienta

= 1001;

UPDATE Konta SET Saldo = Saldo +1000 WHERE Id_klienta

= 9999;

background image

Transakcje

UPDATE Konta SET Saldo = Saldo – 1000 WHERE Id_klienta

= 1001;

UPDATE Konta SET Saldo = Saldo +1000 WHERE Id_klienta

= 9999;

• Załóżmy, że pierwsza instrukcja wykonała się, a

druga
nie może zostać wykonana na przykład z powodu
tego,
że 9999 jest błędnym identyfikatorem klienta albo
z powodu awarii komputera. Z punktu widzenia
aplikacji dane znalazły się w stanie niespójnym i
pozostaje tylko jedna możliwość -
wycofać wynik pierwszej instrukcji UPDATE.
Do tego celu służy instrukcja

ROLLBACK

.

COMMIT

- zatwierdza zmiany w bazie danych

bez możliwości późniejszego ich wycofania.

background image

Blokowanie dostępu do tabel

(Oracle)

• Oracle zakłada blokady na wierszach, na których są

przeprowadzane operacje.

• Programista może sam założyć blokadę na tabelę,

ograniczając możliwości jej zmian przez innych
użytkowników.  

LOCK TABLE nazwa_tabeli
IN [SHARE|EXCLUSIVE] MODE
[NOWAIT];

SHARE

– tryb współdzielony - przeciwko zmianom

dokonywanym przez kogokolwiek (wielu użytkowników
może założyć taką blokadę jednocześnie),

EXCLUSIVE

- tryb wyłączny - przeciwko zmianom

dokonywanym przez innych użytkowników, samemu
można zmieniać (tylko jeden użytkownik może mieć
założoną taką blokadę),

NOWAIT

- nie czekać na założenie blokady.

background image

Blokady

• W Oracle: każdy użytkownik - mający

odpowiednie uprawnienia - może odczytywać
zatwierdzone dane w tabeli, niezależnie od
założonych blokad.

• W innych systemach tryb

EXCLUSIVE

może

uniemożliwiać jednoczesne odczytywanie danych.

Zdjęcie blokady następuje przez wykonanie

COMMIT

lub

ROLLBACK

.

background image

Klauzula FOR UPDATE

• W systemie Oracle jest możliwe założenie blokady

na wiersze będące wynikiem zapytania:

 

SELECT nazwa_kolumny
. . .
FOR UPDATE [ NOWAIT];

 

• Wykonanie COMMIT lub ROLLBACK kończy

blokadę wskazanych wierszy.

background image

Transakcje “tylko-odczyt”

• “Zamrożenie” widoku bazy danych do jej aktualnego

stanu dla następnie wykonywanych instrukcji SELECT.
Instrukcje SELECT korzystają ze “zdjęcia
migawkowego” bazy danych wykonanego w tym
momencie.  

• Instrukcja

SET TRANSACTION READ ONLY;

musi być pierwszą instrukcją w transakcji – złożonej z

ciągu instrukcji

SELECT

i

LOCK TABLE

.

• ''Odmrożenie'' widoku bazy danych następuje przez

wykonanie polecenia COMMIT.

• Rozpoczęcie transakcji typu

nie-

READ ONLY

(opcjonalne).

SET TRANSACTION READ WRITE;

background image

Poziomy izolacji transakcji

SET TRANSACTION ISOLATION LEVEL
[READ COMMITED|SERIALIZABLE];

SERIALIZABLE

(izolowana transakcja) ::

gwarancja,
że transakcja działa na spójnych, nie zmienianych
przez inne transakcje danych (domyślny poziom
w
Standardzie).

READ COMMITED

(transakcja z odczytem

zatwierdzonych danych) :: transakcja działa na
zmienianych jednocześnie przez innych
użytkowników danych (ale dopiero po
zatwierdzeniu przez nich zmian). Zapewnia
większą współbieżność działania
systemu baz danych (domyślny poziom w
Oracle).

W standardzie jest więcej

opcji!

background image

Słownik danych - informacja o

obiektach bazy danych (Oracle)

• Ma postać zbioru tabel i perspektyw.
• Z przedrostkiem

User

- informacja o wszystkich obiektach,

których dany użytkownik jest właścicielem –

• tabele: User_Tables (Tabs),

• tabele i kolumny: User_Tab_Columns (Cols),

• więzy spójności: User_Constraints,
User_Cons_Columns,

• indeksy: User_Indexes (Ind),
User_Ind_Columns,

• synonimy: User_Synonyms (Syn),

• perspektywy: User_Views.

• z przedrostkiem

All

- dotyczy wszystkich obiektów do

których użytkownik ma uprawnienia (np. All_Tables),

• z przedrostkiem

Dba

- informacja o obiektach dostępnych

dla administratorów systemu (np. Dba_Users).

background image

SELECT Table_Name
FROM User_Tables;

- Podobnie

All_Tables

wypisuje nazwy tabel, których właścicielem jest
dany użytkownik.

Przykład

SELECT Column_Name,
Data_Type
FROM User_Tab_Columns
WHERE Table_Name =
'EMP';

COLUMN_NAME DATA_TYPE
----------- ---------

EMPNO NUMBER
ENAME VARCHAR2
JOB VARCHAR2
MGR NUMBER
HIREDATE DATE
SAL NUMBER
COMM NUMBER
DEPTNO NUMBER

background image

Przyznawanie i odbieranie

uprawnień w bazie danych

GRANT uprawnienie, ...
ON obiekt
TO użytkownik, ...|PUBLIC
[WITH GRANT OPTION]

uprawnienie - rodzaj operacji, do jakiej

użytkownik uzyskuje uprawnienie, np.

SELECT

,

DELETE

,

INSERT

,

UPDATE

,

ALTER

i

EXECUTE

;

obiekt - tabela, perspektywa, …

WITH GRANT OPTION

- obdarowany

użytkownik może uzyskane uprawnienia
przekazywać innym użytkownikom;

PUBLIC

- przyznanie uprawnienia wszystkich

użytkownikom

.

background image

Nadać księgowej uprawnienia dostępu do tabeli
Emp w zakresie wykonywania instrukcji

SELECT

oraz również instrukcji

UPDATE

, ale tylko w

odniesieniu do kolumny Sal.

Przykład

GRANT SELECT,
UPDATE(Sal)
ON Emp
TO Księgowa;

background image

Uprawnienia systemowe

• Np.

CREATE TABLE

,

CREATE VIEW

,

CREATE

SESSION

(uprawnienie do

logowania się do bazy danych).

• Administrator bazy danych Oracle tworzy

konto użytkownika za pomocą instrukcji:

 

CREATE USER użytkownik IDENTIFIED

BY hasło;

  GRANT CREATE SESSION, CREATE

TABLE TO użytkownik; 

DROP USER użytkownik [CASCADE];

CASCADE

- system usuwa użytkownika razem

ze wszystkimi jego obiektami.

background image

REVOKE

• Uprawnienia odwołuje się za pomocą instrukcji

odwrotnej do instrukcji GRANT.

 

REVOKE uprawnienie, ...
ON nazwa_obiektu
FROM użytkownik, ... | PUBLIC;

background image

Role (Oracle, SQL’1999)

• W celu ułatwienia przyznawania uprawnień

dużej liczbie użytkowników zostało
wprowadzone pojęcie roli tzn. powiązania
grupy użytkowników ze zbiorem uprawnień.

• Z jednej strony konkretnym użytkownikom

przyznaje się uprawnienie do danej roli
(przyznając im tę rolę).

• Z drugiej strony roli przyznaje się konkretne

uprawnienia do wykonywania operacji w bazie
danych.

background image

Utwórz role Dyrektora i Urzędnika, przydziel im
uprawnienia
i zalicz do nich konkretnych użytkowników:

Przykład

CREATE ROLE Dyrektor;
CREATE ROLE Urzędnik;

GRANT SELECT ON Emp TO Dyrektor;
GRANT SELECT, UPDATE ON Emp TO
Urzędnik;

GRANT Dyrektor TO King, Leon;
GRANT Urzędnik TO Liza, Ewa, Marta;

background image

Role zdefiniowane przez

System

CONNECT

- zawierająca uprawnienie

CREATE

SESSION

,

RESOURCE

- uprawnienia do tworzenia

obiektów,

DBA

- uprawnienia do wykonywania funkcji

administratora systemu.

• Przy tworzeniu konta nowego użytkownika

przydziela się mu się najczęściej role:

CONNECT

i

RESOURCE

– umożliwiające pełne korzystanie

z instrukcji SQL
na swoim koncie.

background image

Schemat

Schemat tworzy grupę powiązanych obiektów.

 

CREATE SCHEMA nazwa_schematu
ciąg instrukcji
CREATE TABLE, CREATE VIEW

i GRANT (bez rozdzielających średników);

 

• Ciąg składowych instrukcji jest realizowany jako

transakcja: albo są wykonywane wszystkie
instrukcje albo żadna.

• W instrukcjach składowych mogą być odwołania

cykliczne REFERENCES między tabelami.

background image

Schemat, katalog, klaster,

schemat informacyjny

• W Standardzie nie występuje w sposób jawny

pojęcie bazy danych.

Katalog - zbiór schematów. Schemat ma jednego

właściciela. W skład katalogu mogą wchodzić
schematy mające różnych właścicieli.

Klaster - zbiór katalogów. Klaster może być

traktowany jako rozproszona baza danych
składająca się ze zbioru katalogów, do których
użytkownik ma dostęp w ramach jednej sesji.

• Dla każdego katalogu powinien być określony

jeden schemat nazywany schematem
informacyjnym
pełniący rolę
słownika danych dla całego katalogu.

background image

Sesja i połączenia

• Zarówno w Standardzie jak i w Oracle8 istnieją

możliwości zmiany ustawień dla danej sesji
użytkownika.

• W Standardzie z każdą sesją jest związany zbiór

połączeń z różnymi bazami danych, z których
tylko jedno jest aktywne. Stosowane są
następujące polecenia:

• uzyskiwanie nowego połączenia

CONNECT TO nazwa_serwera;

• zmiana istniejącego połączenia

SET CONNECTION nazwa_serwera;

• rozłączenie połączenia

DISCONNECT nazwa_serwera;

background image

ALTER SESSION

Niektóre własności sesji mogą być zmieniane w
trakcie połączenia. Od Oracle8 zmiany
wprowadza się za pomocą instrukcji ALTER
SESSION, na przykład:

 

ALTER SESSION ISOLATION LEVEL

SERIALIZABLE;

 

powoduje ustawienie poziomu izolacji transakcji
w sesji na SERIALIZABLE.

background image

Dziedziny (domeny)

(Standard)

Zdefiniujmy dziedzinę numerów departamentów:

 

CREATE DOMAIN Dept# CHAR(3)
CHECK (VALUE IN

('A00','B01','D01','D11','D21', 'XXX'))

DEFAULT 'XXX';

 

Następnie, możemy jej użyć przy określaniu typu
danych kolumn w tabelach:

 

CREATE TABLE Dept
(DeptNo DOMAIN Dept# PRIMARY KEY,
...);

background image

Asercje

(Standard)

Więzy spójności definiowane poza instrukcjami
CREATE TABLE i ALTER TABLE dotyczące całej
tabeli.

 

CREATE ASSERTION maxempl
CHECK (1000 <= SELECT COUNT (*)

FROM Emp);

 

DROP ASSERTION nazwa_asercji;

background image

Tabele tymczasowe

• Są częścią schematu bazy danych - ich zawartość jest

niszczona:

• przy każdym zakończeniu sesji użytkownika

(opcja ON COMMIT PRESERVE ROWS),

• przy każdej operacji COMMIT

(opcja ON COMMIT DELETE ROWS).

 

CREATE GLOBAL TEMPORARY TABLE

Prac_zatrudniani_dziś

(Nr_kolejny INTEGER PRIMARY KEY,
Imię VARCHAR(40) NOT NULL,
Nazwisko VARCHAR(50) NOT NULL,
Informacja VARCHAR(1000))
ON COMMIT PRESERVE ROWS;

background image

Generowanie jednoznacznych

numerów (Oracle)

Sekwencja - przechowywana w bazie danych - służy do

generowania jednoznacznych numerów dla wartości
kluczy głównych.  

CREATE SEQUENCE nazwa_sekwencji
[INCREMENT BY k]
[START WITH n];

gdzie n jest pierwszą generowaną liczbą naturalną, a k
jest wartością, o jaką wzrasta kolejno generowany
numer.

nazwa_sekwencji.NextVal - generowanie kolejnej

wartości w sekwencji,

nazwa_sekwencji.CurrVal - ostatnio wygenerowana

wartość w sekwencji (w ramach aktualnej sesji).

background image

Utwórz dwie sekwencje generujące jednoznaczne
numery dla działów i dla pracowników.

Przykład

CREATE SEQUENCE Dept_seq
INCREMENT BY 10
START WITH 10;

 
CREATE SEQUENCE Emp_seq
INCREMENT BY 1
START WITH 1000;

background image

INSERT INTO Dept(Deptno, Dname, Loc)
VALUES (Dept_seq.NextVal, 'Sprzedaż',
'Warszawa');

 

Oto instrukcja tworząca kolejnego pracownika, z
wykorzystaniem wygenerowanego przed chwilą,
numeru działu:

 

INSERT INTO Emp
VALUES (Emp_seq.NextVal, 'Stec', 'MANAGER',
NULL, '20-JAN-90', 10000, 0,
Dept_seq.CurrVal);

Przykład

background image

Klaster

(Oracle)

• Struktura fizycznego przechowywania danych, w

której kilka tabel jest zebranych razem według
wartości wspólnej kolumny (kolumn) - lub wartości
funkcji haszującej. Umożliwia szybsze
dokonywanie złączeń tabel wchodzących w skład
klastra.

• Najpierw tworzy się klaster, następnie tabele w

klastrze i w końcu indeks klastra. Dopiero w tym
momencie można rozpocząć wstawianie wierszy
do tabel w klastrze.

• Przykład klastra dla tabel Dept i Emp. Indeksem

klastra, względem którego gromadzone są obok
siebie na dysku
wiersze tych tabel, jest numer działu.

• Razem jest trzymany wiersz opisujący dział jak i

wiersze pracowników przypisanych do tego działu.

background image

CREATE CLUSTER Personnel

(Department_number NUMBER(2));

CREATE TABLE Dept

(Deptno NUMBER(2) PRIMARY KEY,
Dname VARCHAR2(9),
Loc VARCHAR2(9))

CLUSTER Personnel (Deptno);
CREATE TABLE Emp

(Empno NUMBER PRIMARY KEY,
Ename VARCHAR2(10) NOT NULL,
Job VARCHAR2(9),
Mgr NUMBER REFERENCES Emp(Empno),
Hiredate DATE,
Sal NUMBER(10,2),
Comm NUMBER(9,0),
Deptno NUMBER(2)NOT NULL REFERENCES Dept(Deptno))

CLUSTER Personnel (Deptno);
CREATE INDEX Idx_personnel ON CLUSTER Personnel;

Przykład


Document Outline


Wyszukiwarka

Podobne podstrony:
Wyklad3 2005
Wyklad2 2005
Wyklad6 2005
Stosowana wyklad 6 2005
C Wykład V 2005 2006 s
Farmakogenetyka wyklad 2005 ze srodowiskiem i chronofarmakoterapia 2
Wyklad7 2005
Wyklad1 2005
Integracja Europejska - Wykłady - 2005 - Mucha-Leszko (44), Nowy folder
Analiza Finansowa - wyklady 2005, FIR UE Katowice, SEMESTR V, Analiza finansowa, Analiza finansowa1,
Pedagogika specjalna - wykłady 2005-2006, niepełnosprawność intelektualna
rmf wykład2 (9 3 2005) MNZMYDR5RVWYSYOFGM4WYTKCOAN52ECPQCE2JJI
Wyklad4 2005
POSTĘPOWANIE KARNE – wykład 2005 BULSIEWICZ, III rok, postępowanie karne
Wyklad8 2005

więcej podobnych podstron