(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