(Microsoft PowerPoint - TBD_s_w5_student [tryb zgodno\234ci])

Transkrypt

(Microsoft PowerPoint - TBD_s_w5_student [tryb zgodno\234ci])
Plan wykładu
• Powtórzenie wiadomości dotyczących ERD
• Przechodzenie od diagramów ER do relacji
Technologie baz danych
• SQL
Wykład 5: Przechodzenie od diagramów ER
do relacji.
SQL – podzapytania.
– Złączenia zewnętrzne
– Podzapytania
Małgorzata Krętowska
Wydział Informatyki
Politechnika Białostocka
2
Proces modelowania i implementacji
bazy danych
Diagramy ER
• Podstawowe elementy ERD
–
–
–
–
•
•
•
•
zbiory encji
encje
atrybuty
związki
Analiza informacji,
które będą zawarte
w bazie danych
Liczności
Klucze
Podklasy
Zbiory słabych encji
Diagram E/R
3
System zarządzania
relacyjną
bazą danych
Schemat bazy
danych
(Model relacyjny)
4
Od diagramów ERD do relacji
Od zbiorów encji do relacji
tytuł
• Zbiory encji przekształcamy w relację z takim samym zbiorem
atrybutów:
rok
Filmy
• Związki z diagramów encji przyjmują postać relacji. Relacja
danego związku R ma następujące atrybuty:
– dla każdego zbioru encji uczestniczącego w R umieszczamy w
schemacie relacji odpowiadającej R klucze tych zbiorów jako
atrybuty tej relacji
– jeśli związek ma własny klucz, to też dołączamy jego atrybuty do
zbioru atrybutów relacji
czas
Tabela Filmy:
Tytuł
Żurek
Kingsajz
Seksmisja
Uwaga: w przypadku powtarzania się nazw atrybutów należy zmienić
ich nazwy
rodzaj
Rok
2003
1987
1985
Czas
95
100
110
Rodzaj
Kolor
Kolor
Kolor
5
6
Od związków do relacji
tytuł
rok
Filmy
czas
Związki wieloargumentowe
nazwisko
Występuje
adres
Kontrakty
Filmy
rodzaj
Tytuł
Potop
Żurek
Kingsajz
Kingsajz
Seksmisja
Studio
aktora
Studio
producenta
Aktorzy
Aktorzy
Studia
Rok
1982
2003
1987
1987
1985
nazwiskoAktora
Daniel Olbrychski
Katarzyna Figura
Katarzyna Figura
Jerzy Stuhr
Jerzy Stuhr
Tabela kontrakty:
–
–
–
–
7
Klucz dla zbioru Filmy: tytuł, rok
Klucz dla zbioru Aktorzy: nazwiskoAktora
Klucz dla Studia producenta: studioProducenta
Klucz dla Studia aktora: studioAktora
8
Złożenie relacji
Zbiory słabych encji
Dopuszcza się możliwość złożenia dwóch relacji:
• Relacja odpowiadająca słabemu zbiorowi encji E powinna
zawierać wszystkie atrybuty, które wchodzą w skład klucza tego
zbioru (tj. atrybuty ze zbioru słabego, jak też atrybuty z innych
„wspomagających” zbiorów encji) oraz pozostałe atrybuty zbioru
słabego.
relacji związanej z danym zbiorem encji E z relacją powstałą ze
związku R wiele do jeden z E do innego zbioru encji.
tytuł
rok
Filmy
czas
rodzaj
nazwa
Posiada
• Związki oznaczone podwójnym rombem nie tworzą oddzielnych
relacji.
Studia
adres
Filmy(tytuł, rok, czas, rodzaj)
Studia (nazwa, adres)
Posiada (tytuł, rok, nazwa)
Filmy(tytuł, rok, czas, rodzaj, nazwaST)
Studia (nazwa, adres)
9
10
Reprezentacja związków isa
w modelu relacyjnym
Przykład - podejście zorientowane
obiektowo
Trzy podejścia:
do aktorów
czas
tytuł
rok
rodzaj
Filmy
• zorientowane obiektowo - każda krotka należy tylko do jednej
klasy; tworzenie relacji dla każdej klasy biorąc pod uwagę
wszystkie jej atrybuty
dubbinguje
isa
• styl E/R - relacje są tworzone dla każdej podklasy; zawierają
atrybuty kluczowe i te atrybuty, które sa powiązane z podklasą
isa
Kreskówki
• Wykorzystując NULL - należy utworzyć tylko jedną relacje; encje
przyjmują wartości NULL dla tych atrybutów, które nie wchodzą
w skład danego zbioru encji
11
•
•
•
•
•
•
Filmy (czas, tytuł, rok, rodzaj)
Kryminały (tytuł, rok, czas, rodzaj, broń)
Kreskówki (tytuł, rok, czas, rodzaj)
Kreskówki-Kryminały(tytuł, rok, czas, rodzaj, broń)
Dubbinguje (nazwiskoAktora, tytuł, rok)
Czy możemy łączyć relacje?
broń
Kryminały
12
Przykład - styl E/R
do aktorów
czas
tytuł
rok
Przykład - wykorzystanie NULL
rodzaj
do aktorów
czas
tytuł
Filmy
rodzaj
Filmy
dubbinguje
dubbinguje
isa
Kreskówki
•
•
•
•
•
rok
broń
isa
isa
Kryminały
isa
Kreskówki
Filmy (czas, tytuł, rok, rodzaj)
Kryminały (tytuł, rok, broń)
Kreskówki (tytuł, rok)
Dubbinguje (nazwiskoAktora, tytuł, rok)
Czy potrzebna jest relacja Kreskówki?
broń
Kryminały
• Film(tytuł, rok, długość, rodzaj, broń)
– (Bolek i Lolek, 1985, 10, Kolor, NULL)
• Dubbinguje (tytuł, rok, nazwiskoAktora)
13
14
Porównanie metod
SQL
• Zapytania:
– Koszt zapytań związanych z wieloma relacjami jest duży, stąd
podejście wykorzystujące NULL jest lepsze.
– Podejscie zorientowane obiektowo jest lepsze dla zapytań typu
„jaka broń jest wykorzystywana w kreskówkach trwających dłużej
niż 150 minut”
– Styl E/R jest lepszy dla zapytań typu „jakie filmy z roku 1999 trwały
dłużej niż 150 minut”
• Złączenia zewnętrzne
• Podzapytania
• Preferuje się schematy z możliwie małą liczbą relacji (E/R - 1
relacja na 1 zbiór encji; o-o - mając korzeń i n podklas
otrzymujemy 2n klas)
• Minimalizacja zajętości dysku: najlepsza metoda o-o; metoda
NULL - w zależności od liczby elementów brakujących może być
lepsza lub gorsza od metody E/R.
15
16
Złączenia zewnętrzne
Złączenia zewnętrzne
SELECT wyrażenia FROM tabele
WHERE warunki łączące tabele [inne warunki]
Działanie:
wyświetlane są wiersze spełniające warunki złączenia
•
• W jaki sposób wyświetlić również informacje o departamencie
40, w którym nikt nie pracuje?
•
SQL select nazwisko, departament.nr_departamentu, nazwa
from pracownik, departament
where pracownik. nr_departamentu (+)=departament.nr_departamentu and
departament.nr_departamentu in (30,40);
SQL select nazwisko, departament.nr_departamentu, nazwa
from pracownik, departament
where pracownik. nr_departamentu=departament.nr_departamentu and
departament.nr_departamentu in (30,40);
NAZWISKO
NR_DEPARTAMENTU NAZWA
---------- ---------- -------------MARTIN
30 SALES
JAMES
30 SALES
TURNER
30 SALES
WARD
30 SALES
40 OPERATIONS
NAZWISKO
NR_DEPARTAMENTU NAZWA
---------- ---------- -------------ALLEN
30 SALES
WARD
30 SALES
MARTIN
30 SALES
BLAKE
30 SALES
TURNER
30 SALES
JAMES
30 SALES
•
•
Departament 40 został powiązany z wierszem tabeli EMP zawierającym same wartości
NULL (mimo, że taki wiersz w tabeli naprawdę nie istnieje)
Łączenie rozszerzone uzyskuje się za pomocą tzw. operatora zewnętrznego łączenia (+).
Powinien być on umieszczany po tej stronie warunku łączącego, która dotyczy tabeli z
niepełną informacją.
17
18
Złączenie zewnętrzne prawe
Złączenie zewnętrzne lewe
• Złączenie prawe - RIGHT OUTER JOIN W złączeniu
zewnętrznym prawym zwracane są wszystkie wiersze
występujące w tabeli z prawej strony, a wiersze z lewej tabeli,
które nie zostały znalezione, wypełnione są wartościami NULL.
SELECT * FROM Tab1
RIGHT OUTER JOIN Tab2 ON Tab1.ID = Tab2.ID;
• Złączenie lewe - LEFT OUTER JOIN W złączeniu zewnętrznym
lewym zwracane są wszystkie wiersze występujące w tabeli z
lewej strony, a wiersze z prawej tabeli, które nie zostały
znalezione, wypełnione są wartościami NULL.
SELECT * FROM Tab1
LEFT OUTER JOIN Tab2 ON Tab1.ID = Tab2.ID;
lub
lub
SELECT tab1.*,tab2.Field1
FROM tab1, tab2
WHERE tab1.ID(+)=tab2.ID;
SELECT tab1.*,tab2.Field1
FROM tab1, tab2
WHERE tab1.ID=tab2.ID(+);
19
20
Złączenie zewnętrzne pełne
Podzapytania
• Podzapytanie - polecenie SELECT zagnieżdżone w innym
poleceniu SELECT. Umożliwia konstruowanie zapytania
odwołującego się do wartości wybranych przez inne polecenie
SELECT. Wyróżniamy podzapytania: zwracające jeden wiersz i
zwracające kilka wierszy.
• Złączenie pełne - FULL OUTER JOIN W rezultatach zapytania
SQL obecne są wiersze złączone wewnętrznie, rozszerzone o
rekordy niezwrócone z obydwu tabel, wypełnione wartościami
NULL.
SELECT * FROM Tab1
FULL OUTER JOIN Tab2 ON Tab1.ID = Tab2.ID ;
• Przykład:
SELECT kolumna1, kolumna2,...
FROM tabela
WHERE kolumna = (SELECT kolumna
FROM tabela
WHERE warunek);
21
22
Podzapytania zwracające jeden wiersz
Podzapytania zwracające jeden wiersz
• Wynikiem jest pojedynczy wiersz.
• Przykład: Znaleźć pracowników z pensją równą minimalnemu
zarobkowi w firmie.
• Co należy robić po kolei?
• Wstawiając zapytanie 1 do 2, otrzymujemy:
•
1. Znajdujemy minimalną pensję:
nazwisko
stanowisko
---------- --------- ---------SMITH
CLERK
800
SQL> select min(pensja) from pracownik;
MIN(PENSJA)
---------800
•
2. Znajdujemy pracowników o pensji równej wartości obliczonej w
pierwszym kroku:
select nazwisko, stanowisko, pensja from pracownik
where pensja =<wynik poprzedniego zapytania>
23
SQL> select nazwisko, stanowisko, pensja from pracownik
where pensja =(select min(pensja) from pracownik);
pensja
Przebieg wykonania zapytania:
– realizacja zapytania wewnętrznego
– na podstawie wartości zwróconej przez blok wewnętrzny przetwarzany jest blok
główny zapytania
•
24
W przypadku zapytań zwracających jeden wiersz mogą być stosowane zwykłe
operatory porównania: =, >, <=,...
Podzapytania zwracające jeden wiersz
Podzapytania zwracające wiele wierszy
• Znaleźć wszystkich pracowników zatrudnionych na tym samym
stanowisku, co BLAKE.
• Znaleźć pracowników o pensjach z listy najniższych zarobków
osiąganych w departamentach.
•
•
SQL> select nazwisko, stanowisko from pracownik where stanowisko=(select
stanowisko from pracownik where nazwisko='BLAKE');
SQL> select nazwisko, pensja, nr_departamentu from pracownik
where pensja in (select min(pensja) from pracownik group by
nr_departamentu);
nazwisko
pensja nr_departamentu
---------- ---------- ---------SMITH
800
20
JAMES
950
30
MILLER
1300
10
nazwisko
stanowisko
---------- --------JONES
MANAGER
BLAKE
MANAGER
CLARK
MANAGER
Lub równoważnie:
• Czy jesteśmy pewni czy zapytanie zwróci jeden wiersz?
25
•
26
Operatory ANY i ALL
Zagnieżdżanie zapytań
• Opearatory ANY i ALL można stosować w podzapytaniach
zwracających więcej niż jeden wiersz. Wykorzystuje się je w
klauzulach WHERE I HAVING łącznie z operatorami
porównywania (=; !=; <; >; <=; >=)
• Znaleźć pracowników, których zarobki przekraczają najwyższą
pensję z departamentu SALES.
•
• Operator ANY powoduje akceptację (spełnienie warunku) po
stwierdzeniu zgodności wyrażenia z którąkolwiek z wartości
zwracanych przez podzapytanie
SQL> select nazwisko, stanowisko, data_zatrudnienia, pensja from pracownik
where pensja>
(select max(pensja)
from pracownik
where nr_departamentu= (select nr_departamentu
from departament
where nazwa=‘SALES'));
nazwisko
stanowisko
data_zatrudnienia
---------- --------- -------- ---------JONES
MANAGER 81/04/02
2975
SCOTT
ANALYST 87/04/19
3000
KING
PRESIDENT 81/11/17
5000
FORD
ANALYST 81/12/03
3000
• Operator ALL służy do porównania z wszystkimi wartościami
zwracanymi przez podzapytanie
• Przed operatorami ANY i ALL można stosować zaprzeczenie NOT
27
SQL> select nazwisko, pensja, nr_departamentu from pracownik
where pensja =ANY (select min(pensja) from pracownik group by
nr_departamentu);
Nie istnieje ograniczenie poziomów zagnieżdżenia.
28
pensja
Podzapytania - wskazówki
• Wewnętrzne zapytanie musi być ujęte w nawiasy i musi
występować po prawej stronie warunku
• W podzapytaniu nie wolno stosować klauzuli ORDER BY.
Obowiązuje zasada jednej klauzuli ORDER BY dla całego
polecenia SELECT. Jeśli jest potrzebna umieszczamy ją jako
ostatnią
29