Model bazy danych
Transkrypt
Model bazy danych
BAZY DANYCH Materiały do wykładów dr inż. Janusz Kosiński Wprowadzenie do tematyki baz danych 2 Typowy „ręczny” system ewidencjonowania. Kluczami „ręcznej” bazy danych są zapisy na papierze. 3 • Komputerowa baza danych - zautomatyzowana wersja funkcji ewidencjonowania i wyszukiwania, stosowanych w systemach „ręcznych”. 4 • Komputerowe bazy danych przechowują informacje w zdefiniowanych formatach i strukturach - od prostych linii tekstu (np. imię, adres), do złożonych struktur danych, zawierających obrazy, dźwięki czy filmy. 5 • Przechowywanie danych w ściśle określonych formatach umożliwia systemowi zarządzania bazą danych (DBMS – database management system) przemianę danych w informacje użyteczne – raporty, odpowiedzi na pytania. 6 Baza danych – narzędzie umożliwiające skuteczne i wydajne przechowywanie oraz manipulowanie informacjami - w tym rozumieniu, że dane są chronione przed przypadkowym uszkodzeniem lub zagubieniem, oraz że mogą Baza danych - fizyczna być przeglądane w różny implementacja modelu relacyjnego sposób, zależnie od opisującego pewne aspekty przyjętych założeń i rzeczywistości zgodnie z regułami, ograniczeń. zaproponowanymi przez E.F.Codd’a w końcu lat 1960. 7 BAZA DANYCH (BD) jest modelem informacyjnym pewnego aspektu rzeczywistości (fizycznej lub / i wyobrażalnej) jest uporządkowanym zbiorem danych przechowywanych w pamięci komputera, których zadaniem jest reprezentowanie tej rzeczywistości. 8 Funkcje bazy danych: ¾ Wyszukiwanie (Zapytania) ¾ Aktualizacja ¾ Zapisywanie/Wprowadzanie ¾ Usuwanie NAJWAŻNIEJSZĄ i NAJCZĘŚCIEJ wykorzystywaną funkcją jest Wyszukiwanie (Zapytania) BD INTEGRUJE dane wielu użytkowników - każdy użytkownik zainteresowany jest tylko pewnym jej fragmentem (w tym sensie BD ma charakter zintegrowany) 9 BD MOŻNA PODZIELIĆ ze względu na sposób zarządzania na operacyjne bazy danych i analityczne bazy danych: * OPERACYJNE BD - znajdują zastosowanie w codziennym funkcjonowaniu organizacji – przechowują dane dynamiczne * ANALITYCZNE BD - są wykorzystywane do przechowywania danych historycznych / statystycznych, które bardzo rzadko ulegają zmianom. 10 Model bazy danych - zbiór zasad, którymi należy się posługiwać podczas tworzenia bazy danych. - określa się reguły, zgodnie z którymi dane umieszcza się w strukturach. - określane są również dozwolone operacje. Definicja struktury danych - specyfikacja reprezentacji dozwolonych w modelu obiektów (encji) oraz ich związków. 11 W informatyce wyróżniamy główne modele baz danych: hierarchiczny model danych relacyjny model danych grafowy model danych obiektowy model danych sieci semantyczne strumieniowe bazy danych (nowe podejście) 12 Model danych Encja* Dostawca Wytwarza dane – bazując na Wykorzystuje dane – bazując na – pojęciowy opis w przestrzeni problemów - zawierający definicje encji i ich atrybutów Odnosi się do Pakiet wymiany Odnosi się do Definiowa nie płatności Definiuje format wynikowy dla Klient Punkt zapytań (Klient, na przykład, jest encją, i może mieć atrybuty: Nazwisko i Adres), oraz ograniczeń Umożliwia dostęp do Dane* (np. Nazwisko_Klienta nie może być puste). opcjonalne * - wskazuje ”przejście” do innego obszaru modelowania Model danych zawiera również opis relacji między encjami i dowolnymi ograniczeniami tych relacji (na przykład menedżerowie nie mogą posiadać więcej niż pięć osób składających im raporty) Model danych nie zawiera żadnych odwołań do fizycznego formatu systemu. 13 Model danych ID Budynek Wejście Ulica ID Lokalizacja ID Działka Data nabycia Encja Właściciel Adres Podatek Relacja Atrybut 14 Model danych (MD) Jest NARZĘDZIEM właściwej INTERPRETACJI DANYCH ZAWARTYCH w BD Jest ZBIOREM ABSTRAKCYJNYCH POJĘĆ umożliwiających ODWZOROWANIE (reprezentację) OKREŚLONYCH WŁASNOŚCI danej organizacji MD powinien być ADEKWATNY do MODELOWANEJ RZECZYWISTOŚCI każda BD i SZBD muszą stosować się do ZASAD określonego MD 15 Termin MODEL DANYCH (MD) jest najczęściej używany w znaczeniu: ARCHITEKTURA DANYCH oraz ZBIÓR WYMAGAŃ W odniesieniu do danych MD jako architektura – to zbiór zasad: definiowania danych (zbiór reguł określających strukturę danych) operowania danymi (zbiór reguł określających jak operuje się danymi) integralności danych (zbiór reguł określających, które stany BD są poprawne) MD jako zbiór wymagań – to zintegrowany, niezależny od implementacji zestaw wymagań dotyczący danych dla pewnej aplikacji (np. kartoteka_zatrudnionych, przetwarzanie _zamówień) 16 TYPY MODELI DANYCH: PROSTE MD (OBIEKTY REPREZENTOWANE SĄ PRZY POMOCY STRUKTURY REKORDÓW ZGRUPOWANYCH W STRUKTURACH PLIKÓW); 17 TYPY MODELI DANYCH: KLASYCZNE (HIERARCHICZNE, SIECIOWE I RELACYJNE); Relacja Krotka SSAN jest kluczem Kolumna SSAN Nazwisko DataUr 999-9 Borek 7/52 18 Mapa Semantyczna TYPY MODELI DANYCH: Lista potrzeb * Kto potrzebuje? (użytkownicy123) * Co potrzebują? (a, b, c) * Kim ja jestem? (użytkownik123) * Co ja chcę? (a, b, c) *Jakie jednostki są mi potrzebne? Użytkownik danych # Zwracane wartości odpowiadające zapotrzebowanej liście elementów (a=10m, b=8kg, c=0,05kg) Usługa Dostępu do Danych 1. Wysyła zapotrzebowania do Mapy Semantycznej 2. Pobiera informację z Mapy Semantycznej 3. Ustala adres źródła danych * wywołuje standard metody dostępu * wysyła listę elementów do pozyskania 4. Pobiera zwracane dane z adresu źródła danych * pobiera wartości źródłowe * pobiera jednostki źródłowe 5. Przemieszcza się do źródła skojarzeń * wywołuje standard metody skojarzeń * wysyła listę elementów do pozyskania 6. Pobiera zwracane dane z adresu skojarzeń * pobiera wymagane wartości * Pobiera wymagane jednostki SEMANTYCZNE (DOSTARCZAJĄ METODY REPREZENTOWANIA ZNACZENIA INFORMACJI): Zwracana lista * adres źródła metadanych (adres źródła: http://sourceMetaData.html) * nazwa elementu w źródle danych (lista źródeł: x, y, z) * adres metadanych skojarzeń (adres skojarzeń: http://assocMetaData.html) lista nazw źródłowych (x, y, z) Metoda Dostępu do Danych Źródlo danych lista nazw źródłowych (x, y, z) z wartościami (x=10m, y=5kg, z=3kg) Nazwane potrzeby z wartościami (a=10m, b=8kg, c=0,05kg) (nie koniecznie baza danych) * lista danych źrółowych z wartościami (x=10m, y=3kg, z=5kg) * lista zapotrzebowań (a, b, c) Skojarzenia a=x b=y+z c = 0,1*z 19 TYPY MODELI DANYCH: Nadklasa obiektu 5 OBIEKTOWE MD należy do (OBIEKTY I KLASY OBIEKTÓW POWIĄZANE MECHANIZMAMI ABSTRAKCJI) Klasa obiektu należy do ma jest częścią Atrybuty Ssak Obiekt Obiekt złożony -KolorOczu: int należy do +getKolorOczu:int ma Atrybuty Pies Kot -czestSzczek: int -czestMiaucz: int +szczek:void +miaucz:void OwczarekNiem +jestNiem:void Część obiektu Pudel +jestFranc:void 20 MODELE POJECIOWE (konceptualne) (Najbardziej zbliżone do sposobu analizy modelowanej rzeczywistości – klasyfikacja obiektów i związków z punktu widzenia projektanta) Relacje między obiektami Plik jest jest Kontener Obszar pracy jest jest Miejsce pracy zawiera jest Dana Elementy wizualne jest Obiekt Urządzenie reprezentuje zawiera Ikona modyfikuje jest na jest Elementy widoczne Widok Okno zawiera zawiera Wskaźnik jest w jest steruje Sterowanie Kursor modyfikuje jest na jest na Ekran steruje Wejście Mechanizmy interakcji jest reprezentuje reprezentuje Mysz jest Klawiatura 21 MODELE IMPLEMENTACYJNE (Reprezentacja BD w konkretnym systemie, np. ACCESS, SYBASE, ORACLE, INFORMIX, DB2, INGRES, MS SQL) JDBC-database ResultSet interaction ResultSet Dyrektywa Aplikacja PreparedSet ResultSet Dyrektywa wywoływalna Połączenie Menedżer urządzeń Sterownik Oracle BD Oracle JDBC – ODBC Most Sterownik ODBC Sterownik Sybase BD Sybase BD ODBC 22 MODELE FIZYCZNE (Sposób organizacji danych w pamięci pomocniczej, zewnętrznej) CPU CACHE PAMIĘĆ GŁÓWNA Składowanie podstawowe DYSK Składowanie drugoplanowe TAŚMA Składowanie trzecioplanowe Zapotrzebowanie na dane Dane odpowiadające zapotrzebowaniu 23 BD – bez względu na zastosowany model danych, powinna być efektywnie zarządzana: PODSTAWOWE FUNKCJE ZARZĄDZANIA BD ª OPTYMALIZACJA ZAPYTAŃ (najkrótszy czas odpowiedzi) ª ZAPEWNIENIE INTEGRALNOŚCI BD (nie może być stanu BD, który nie istnieje w modelowanej rzeczywistości) ª ZARZĄDZANIE DOSTĘPEM WSPÓŁBIEŻNYM (użytkownik BD nie może odczuć obecności drugiego użytkownika) ª ODTWARZANIE POPRZEDNIEGO STANU BD (odporność na awarie) ª OCHRONA DANYCH (uniemożliwienie niepowołanego dostępu) 24 SYSTEM BAZY DANYCH (SBD) to BD i ŚRODKI PROGRAMOWE umożliwiające współbieżne operowanie na niej. SBD opisuje pewne aspekty rzeczywistości danej organizacji. FUNDAMENTALNĄ CECHĄ SBD jest zapewnienie UŻYTKOWNIKOM takiego poziomu ABSTRAKCJI WIDZENIA DANYCH, który przesłania szczegóły dotyczące ich struktury fizycznej. Uzyskuje się to dzięki oferowanym MODELOM DANYCH (MD) 25 ZINTEGROWANA BAZA DANYCH PrWs 1 . . . ... PrWs 2 PrWs n BEZPOŚREDNI UŻYTKOWNICY PROGRAMY WSADOWE SYSTEM BAZY DANYCH 26 UŻYTKOWNICY SCHEMAT ZEWNĘTRZNY 1 . . . . . SCHEMAT ZEWNĘTRZNY N SCHEMAT POJĘCIOWY POZIOM POJĘCIOWY SCHEMAT IMPLEMENTACYJNY BD BD POZIOM ZEWNĘTRZNY POZIOM IMPLEMENTACJI BD POZIOM FIZYCZNY TRÓJPOZIOMOWA ARCHITEKTURA SBD 27 JĘZYKI BAZ DANYCH: standard SQL 92 Z JĘZYK DEFINIOWANIA DANYCH (Data definition language – DDL) umożliwia definiowanie struktury danych przechowywanych w BD, a więc tworzenie schematu implementacyjnego Z JĘZYK MANIPULOWANIA DANYMI (Data manipulation language – DML) umożliwia wypełnianie BD nowymi danymi, ich aktualizację i usuwanie Z JĘZYK STEROWANIA DANYMI (Data control language – DCL) - nadaje uprawnienia użytkownikowi BD Z JĘZYK ZAPYTAŃ (Query language) – umożliwia pobieranie z BD informacji zgodnych z wyspecyfikowanymi warunkami 28 POWSZECHNYM STANDARDEM w dziedzinie języków baz danych oferowanym przez większość firm – producentów jest SQL. UMOŻLIWIA ON ZARÓWNO DEFINIOWANIE JAK I MANIPULOWANIE DANYMI, A ZATEM ZAWIERA KOMPONENTY DDL I DML. 29 WŁAŚCIWOŚCI BAZY DANYCH: WSPÓŁDZIELENIE DANYCH (BD jest używana przez więcej niż jedną osobę) INTEGRACJA DANYCH (jeden logiczny element danych jest przechowywany tylko w jednym miejscu BD, nie ma niepotrzebnych lub powtarzających się danych) INTEGRALNOŚĆ DANYCH (BD powinna dokładnie odzwierciedlać obszar analizy, którego ma być modelem) NIEZALEŻNOŚĆ DANYCH: ` LOGICZNA (dane oddzielone są od procesów, które używają tych danych; organizacja danych jest niewidoczna dla użytkowników i programów użytkowych korzystających z danych) ` FIZYCZNA (rozszerzenie lub zmiana struktury fizycznej komputera nie wpływa na stan BD) 30 WŁAŚCIWOŚCI BAZY DANYCH: ABSTRAKCJA DANYCH (BD może być traktowana jako model informacyjny, odwzorowujący istotne właściwości rzeczywistości) RÓŻNORODNOŚĆ SPOSOBÓW WIDZENIA DANYCH (możliwość używania tzw. FILTRÓW – PERSPEKTYW, które są nakładane na te same dane) ZASTOSOWANIE DEKLARATYWNYCH JĘZYKÓW PROGRAMOWANIA (co zrobić? a nie, jak zrobić?) BEZPIECZEŃSTWO DANYCH (zabezpieczenie BD przed utratą integralności) WIZUALIZACJA INTERFEJSÓW DO DANYCH (możliwość wyświetlania tych samych danych w różnych formatach) 31 KORZYŚCI WYNIKAJĄCE ZE STOSOWANIA BAZ DANYCH: ZMNIEJSZENIE NADMIAROWOŚCI (wykorzystywanie danych przez różnych użytkowników nie powoduje dublowania aplikacji) WSPÓŁDZIELENIE DANYCH (współbieżne wykorzystywanie danych przez różnych użytkowników i aplikacje) AUTORYZACJA DOSTĘPU DO DANYCH (ograniczenie dostępu do danych – problem niepowołanych użytkowników) REPREZENTACJA ZŁOŻONYCH ZWIĄZKÓW MIEDZY DANYMI (związki intuicyjne, semantyczne) INTEGRALNOŚĆ DANYCH (zabezpieczenie przed definiowaniem niewłaściwych związków – relacji i nadawaniem złych wartości) MOŻLIWOŚĆ OCHRONY PRZED AWARIAMI (odtwarzanie stanu BD sprzed awarii) 32 KIEDY NALEŻY ROZWAŻYĆ ZASADNOŚĆ STOSOWANIA BD: SEKWENCYJNE – ŚCIŚLE SKORELOWANE, przetwarzanie danych przez jednego użytkownika NISKI STOPIEŃ wzajemnego powiązania danych MECHANIZMY w zakresie współbieżności dostępu, bezpieczeństwa danych, odtwarzania BD po awariach oraz definiowania ograniczeń integralności, planowanego do wdrożenia SZBD są nadmiarowe w stosunku do potrzeb OGRANICZENIA czasowe i finansowe 33 SYSTEM BAZY DANYCH Aplikacja zawiera formularze i raporty z którymi użytkownik wchodzi w interakcję Silnik bazy danych nie jest częścią bazy danych Baza danych zawiera fizyczną implementację schematu i danych Schemat bazy danych opisuje model danych w bazie Model danych jest pojęciowym opisem przestrzeni problemów Przestrzeń problemów jest dobrze zdefiniowaną częścią realnego świata 34 WE / WY programów Formularze WWW Interfejs SQL Polecenia SQL Przepływ poleceń Wykonanie projektu Analizowanie składni Interakcje Obliczenia operatorowe Optymalizacja Silnik Pliki i metody dostępu Menedżer Transakcji Menedż Menedżer buforó buforów Menedżer Zabezpieczeń Menedżer odtwarzania stanu początkowego Menedżer przestrzeni dysku Kontrola Współbieżności DBMS Odniesienia Pliki indeksów Katalog systemowy Pliki danych Baza Danych 35 Relacyjny model danych 36 37 1970r – E. F. CODD, badacz zatrudniony przez firmę IBM, opublikował dzieło swojego życia pt. „RELACYJNY MODEL LOGICZNY DLA DUŻYCH BANKÓW DANYCH” Edgar F. Codd (1923-2003) – powstają relacyjne bazy danych (RBD) oparte na dwóch gałęziach matematyki – Teorii mnogości i rachunku predykatów pierwszego rzędu 38 1979r E. F. CODD publikuje na konferencji AUSTRALIAN COMPUTER SOCIETY pracę pt. ”Extending the Relational Database Model to Capture More Meaning”, 1985r w której przedstawił rozszerzoną wersję relacyjnego modelu danych – RM/T E. F. CODD formułuje zasady dla RBD Zasady E.F. Codda, znane jako „Twelve Principles of Relational Databases”, dostarczają kryteriów do definiowania relacyjnych systemów baz danych: 39 Kryteria relacyjności baz danych 1. Informacje są reprezentowane logicznie w tabelach. 2. Dane są logicznie dostępne przez podanie nazwy tabeli, wartości klucza podstawowego i nazwy kolumny. 3. Wartości NULL są traktowane w jednolity sposób jako „brakujące informacje”. Nie mogą być traktowane jako puste łańcuchy znaków, puste miejsca czy zera. 4. Metadane (dane dotyczące bazy danych) są umieszczane w bazie danych dokładnie tak, jak zwykłe dane.. 5. Język (instrukcje) obsługi danych ma możliwość definiowania danych i perspektyw, więzów integralności, przeprowadzenia autoryzacji, obsługi transakcji i manipulacji danymi. 6. Perspektywy reagują na zmiany swoich tabel bazowych. Analogicznie zmiana w perspektywie powoduje automatycznie zmianę w tabeli bazowej. 7. Istnieją pojedyncze operacje pozwalające na wyszukiwanie, wstawianie, uaktualnianie i usuwanie danych. 8. Operacje użytkownika są logicznie oddzielone od fizycznych danych i metod dostępu. 9. Operacje użytkownika pozwalają na zmianę struktury bazy danych bez konieczności tworzenia od nowa bazy oraz aplikacji ją obsługującej. 10. Więzy integralności są umieszczone i dostępne w metadanych, a nie w programie obsługi baz danych. 11. Język manipulacji danymi powinien działać bez względu na to, jakie i jak są rozmieszczone fizyczne dane oraz nie powinien wymagać żadnych zmian, gdy fizyczne dane są centralizowane lub rozpraszane. 12. Operacje na pojedynczych rekordach przeprowadzane w systemie podlegają tym samym zasadom i więzom, co operacje na zbiorach danych. 40 RMD dostarcza tylko jednego sposobu reprezentowania – jest nim dwuwymiarowa tabela nazwana relacją RBD jest zbiorem relacji Atrybut – istotna (konieczna, nieodłączna) cecha obiektu – encji. NRPRAC – NAZWISKOPRAC – STATUS – A1; A2; A3; 41 POLA (ATRYBUTY, KOLUMNY) Nazwy pól REKORDY (KROTKI, WIERSZE) sid nazwisko login wiek gpa 50000 Drabek dra@music 19 3.3 53666 Jurek jurek@tlen2 18 3.4 53688 Kowal kwl@cert 18 3.2 53650 Kowal kwl@edu 19 3.8 53831 Mizera mar@math 11 1.8 53832 Kwiatkowski kwiat@interia 12 2.0 42 ATRYBUTY – WŁAŚCIWOŚCI: * * KLUCZOWE (jednoznacznie charakteryzują encję) * * NIEKLUCZOWE * * OBOWIĄZKOWE * * OPCJONALNE * * PUSTE (brak wartości, niepełna lub nieznana wartość NULL) * * WYLICZANE (wyprowadzenie – wynik obliczeń lub konkatenacji innych atrybutów) * * JEDNO I WIELOWARTOŚCIOWE (wiele wartości tego samego typu) * * SEGMENTOWE (więcej niż jeden typ wartości). ATRYBUTY SŁUŻĄ DO NAZYWANIA KOLUMN RELACJI 43 DZIEDZINA (DOMENA) – zbiór wszystkich możliwych wartości atrybutu A. NR_PRAC(zbiór liczb całkowitych) NAZWISKO_PRAC(łańcuch znaków) STATUS(łańcuch znaków) KAŻDY ATRYBUT relacji musi mieć określony typ atomowy, tzn. musi należeć do typów elementarnych (np. typ znakowy lub całkowity) • WARTOŚĆ ATRYBUTU nie może być rekordem, listą lub tablicą, żadną inną strukturą, którą można podzielić na inne części • SCHEMAT RELACJI to – nazwa relacji oraz jej zbiór atrybutów (mimo, że atrybuty schematu relacji nie stanowią listy, bowiem są zbiorem, to często trzeba określić „standardowy” porządek atrybutów) 44 RELACJĄ /INSTANCJĄ R(A1, A2, . . . An) określoną na danym schemacie relacji R nazywamy skończony zbiór krotek takich, że: {〈a1, a2, . . . an〉 : a1∈ dom(A1), . . , an ∈ dom(An) } gdzie : R(A1, A2, . . . An) jest relacją określoną na schemacie relacji R(A1, A2, . . . An) 101 JANKOWSKI 102 FALCZAK 103 KONIECZNY PROFESOR ASYSTENT DOCENT a SCHEMAT RELACJI jest w zasadzie niezmienny, INSTANCJA może często ulegać zmianom a RELACJA jest TABELĄ, dla której spełniony jest zbiór zasad, przedstawiony na następnym slajdzie 45 ² Każda relacja w BD ma jednoznaczną nazwę (dwuwymiarowa tabela jest matematycznym zbiorem, a zbiory muszą być jednoznacznie nazwane) ² Każda kolumna w relacji ma jednoznaczną nazwę w ramach jednej relacji (kolumna też jest zbiorem) ² Wszystkie wartości w kolumnie muszą być tego samego typu ² Porządek kolumn w relacji nie jest istotny (schemat relacji – lista nazw jej kolumn – jest również zbiorem matematycznym) 46 ² Każdy wiersz w relacji musi być różny (powtórzenia wierszy nie są w relacji dozwolone) ² Porządek wierszy nie jest istotny (relacja jest zbiorem) ² Każde pole leżące na przecięciu kolumny i wiersza w relacji powinno zawierać wartość atomowa (zbiór wartości nie jest dozwolony na jednym polu relacji) a PERSPEKTYWA – Wirtualna tabela, składająca się z pól jednej lub większej liczby rzeczywistych tabel 47 PRZEDMIOTY NAZWA_PRZEDMIOTU POZIOM KOD_KURSU NR_PRAC SYSTEMY RELACYJNYCH BAZ DANYCH 1 SRD 234 PROJEKTOWANIE RELACYJNYCH BAZ DANYCH 1 PRD 234 DEDUKCYJNE BAZY DANYCH 3 DBD 345 OBIEKTOWE BAZY DANYCH 3 OBD 345 ROZPROSZONE BAZY DANYCH 2 RBD 237 WYKŁADOWCY NR_PRAC NAZWISKO_Prac Status 234 DOROSZ T PZ 237 JURCZAK S PU 345 ELSNER R AD Tabele PRZEDMIOTY i WYKŁADOWCY spełniają podane reguły, a więc stanowią reprezentację relacji 48 KLUCZE RELACJI Ö Mówimy, że atrybut, lub zbiór atrybutów {A1, A2, . . . ,An } tworzy klucz relacji, jeżeli: 9 wszystkie pozostałe atrybuty relacji są funkcyjnie zależne od tych atrybutów (nie może się więc zdarzyć, aby dwie różne krotki relacji R, były zgodne dla wszystkich atrybutów A1, A2, . . . ,An) 9 nie istnieje taki podzbiór właściwy zbioru {A1, A2, . . . ,An }, od którego pozostałe atrybuty relacji R są funkcyjnie zależne, tzn. KLUCZ MUSI BYĆ MINIMALNY ZALEŻNOŚĆ FUNKCYJNA ATRYBUT B RLACJI JEST FUNKCYJNIE ZALEŻNY OD ATRYBUTU A TEJ RELACJI, JEŚLI ZAWSZE KAŻDEJ WARTOŚCI a ATRYBUTU A ODPOWIADA NIE WIĘCEJ NIŻ JEDNA WARTOŚĆ b ATRYBUTU B A B 49 Ò KLUCZE GŁÓWNE – jedna lub więcej kolumn (atrybutów) tabeli (relacji), których wartości jednoznacznie identyfikują każdy wiersz (krotkę) w tabeli (relacji,/instancji) Ò KLUCZE KANDYDUJĄCE – kolumna lub zbiór kolumn, które mogą występować jako jednoznaczny identyfikator. Każdy klucz kandydujący musi być jednoznaczny i nie może mieć wartości NULL. Ò KLUCZE OBCE – atrybuty, które są kluczowe w innym zbiorze encji (pozwalają tworzyć połączenia danych przechowywanych w różnych tabelach, tzn. RELACJE MIĘDZY TABELAMI Ò NADKLUCZ – zbiór atrybutów, który zawiera klucz 50 POWIĄZANIA (relacje) pomiędzy parą tabel istnieją wtedy, gdy dwie tabele są połączone przez klucz główny (podstawowy) i klucz obcy KAŻDA RELACJA jest opisywana przez: • TYP RELACJI, • TYP UCZESTNICTWA, jaki obie tabele mają w tej relacji oraz • STOPIEŃ UCZESTNICTWA tych tabel 51 TYPY RELACJI: * * JEDEN DO JEDNEGO – jeżeli pojedynczemu rekordowi w pierwszej tabeli przyporządkowany jest najwyżej jeden rekord z drugiej i odwrotnie, pojedynczemu rekordowi z drugiej tabeli może być przyporządkowany najwyżej jeden rekord z pierwszej * * JEDEN DO WIELU – jeżeli pojedynczemu rekordowi z pierwszej tabeli może odpowiadać więcej rekordów z drugiej, podczas gdy pojedynczemu rekordowi z drugiej tabeli odpowiada najwyżej jeden rekord z pierwszej * * WIELE DO WIELU - jeżeli pojedynczemu rekordowi w pierwszej tabeli może odpowiadać jeden lub wiele rekordów z drugiej tabeli i odwrotnie, pojedynczy rekord z drugiej tabeli może być powiązany z jednym lub większa liczba rekordów z pierwszej 52 PRACOWNICY Id_prac Imie_prac Nazwisko_prac 100 Stefan Krawczyk 101 Jerzy Rojek 102 Adam Zdziarski WYNAGRODZENIA Id_prac Stawka_godz Premia 100 25$ 150$ 101 18$ 200$ 102 32$ 130$ JEDEN DO JEDNEGO 53 JEDEN DO WIELU STUDENCI Id_stud Imie_stud Nazwisko_stud 601 Grzegorz Majek 603 Kazimierz Sturski 608 Edward Zgorzelak W POLU ID_STUDENTA liczba 603 MOŻE SIĘ POJAWIĆ WIELE RAZY Id_instrumentu Id_studenta 10 601 17 603 23 608 35 603 54 WIELE DO WIELU STUDENCI Id_stud W POLU Id_studenta liczba 603 MOŻE SIĘ POJAWIĆ WIELE RAZY Zaś Id_instrumentu - liczba 17 - może się pojawić dla więcej niż jednego studenta Imie_stud Nazwisko_stud 601 Grzegorz Majek 603 Kazimierz Sturski 608 Edward Zgorzelak Id_instrumentu Id_studenta 10 601 17 603 17 608 23 608 35 603 55 TYPY UCZESTNICTWA * * OBOWIĄZKOWY – jeżeli w tabeli A muszą znajdować się pewne rekordy zanim zabierzemy się do wprowadzania rekordów do tabeli B, wówczas mówimy, że uczestnictwo tabeli A jest obowiązkowe; * * OPCJONALNY - odwrotnie. STOPIEŃ UCZESTNICTWA – określa minimalną i maksymalną liczbę rekordów w jednej tabeli, które można powiązać z pojedynczym rekordem drugiej tabeli 56 TYP UCZESTNICTWA Obowiązkowy POSREDNICY Id_posred Imie_posred Nazwisko_posred 202 Agata Mroczek 203 Mateusz Nawrot 204 Waldemar Szybki KLIENCI Id_klienta Id_posred Imie_klienta Nazwisko_klienta 95 202 Tadeusz Kowalczyk 96 203 Adam Cieciera 97 204 Józef Sztaba 57 DIAGRAMY ZWIĄZKÓW ENCJI MODELOWANIE SEMANTYCZNE (dane potrzebne do realizacji danej BD nie zawsze należą nieodwołalnie do jednej z trzech kategorii: ENCJI, ZWIĄZKU lub ATRYBUTU) PRZYKŁAD – dane nt.ŚLUBU: ENCJA – SLUB, ATRYBUTY – DATA,MIEJSCE,NAZWISKA PANNY i PANA MŁODEGO; ATRYBUT- STAN CYWILNY związany z encją – OSOBA; ZWIĄZEK między encjami MEZCZYZNA i KOBIETA. PROJEKTANT POWINIEN PODJĄĆ DECYZJĘ, KTÓRY z w/w PUNKTÓW WIDZENIA JEST NAJWAŻNIEJSZY DLA BRANEJ POD UWAGĘ BD 58 PRZEKSZTAŁCANIE DIAGRAMU E – R W SCHEMAT RELACYJNY DLA KAŻDEJ ENCJI TWORZYMY TABELĘ (nazwa tabel w liczbie mnogiej) IDENTYFIKUJĄCY ATRYBUT STAJE SIĘ KLUCZEM GŁÓWNYM; WSZYSTKIE INNE ATRYBUTY ENCJI STAJĄ SIĘ NIEGŁÓWNYMI ATRYBUTAMI TABELI DLA KAŻDEGO ZWIĄZKU JEDEN DO WIELU wstawiamy klucz główny tabeli ze strony jeden linii związku do tabeli reprezentującej stronę wiele linii związku OPCJONALNOŚĆ po stronie WIELE LINI ZWIĄZKU mówi nam, czy klucz obcy reprezentujący związek może być NULL, czy nie (jeśli strona wiele jest wymagana,to klucz obcy nie może być NULL) 59 DLA RBD nie istnieje uzgodniona składnia wyrażania struktury danych (ciąg szablonów złożonych z nazw, relacji, atrybutów i deklaracji kluczy głównych i obcych) OPEROWANIE DANYMI (Jak wstawiamy dane do relacji? Jak usuwamy dane z relacji? Jak wyszukujemy dane w relacji?) ALGEBRA RELACYJNA – zbiór następujących operatorów: 60 SELEKCJA (OGRANICZENIE) – operator, który bierze jedną relację jako swoją i produkuje w wyniku jedną relację (pozioma maszyna do cięcia – wydobywa wiersze, które pasują do podanego warunku) [RESTRICT] RZUT - operator, który bierze jedną relację jako swój argument i produkuje w wyniku jedną relację (pionowa maszyna do cięcia – wydobywa wiersze, ale uwzględnia w nich tylko wyspecyfikowane kolumny) [PROJECT] 61 S2 S1 sid sname ocena wiek 22 Dorota 7 45,0 31 Lena 8 55,5 58 Robert 10 35,0 sid snazwa ocena Wiek 28 Jadwiga 9 35,0 31 Lena 8 55,0 44 Grażyna 5 35,0 58 Robert 10 35,0 R1 Tabele poddawane działaniom algebry relacyjnej sid bid dzien 22 101 10/10/04 58 103 11/12/04 62 σocena>8(S2) selekcja S2 sid snazwa ocena 28 Jadwiga 9 35,0 31 Lena 8 55,0 44 Grażyna 5 35,0 58 Robert 10 35,0 sid snazwa ocena Wiek 28 Jadwiga 9 35,0 58 Robert 10 35,0 Wiek πwiek(S2) Wiek projekcja 35,0 55,0 63 πsnazwa;ocena(S2) snazwa projekcja S2 sid snazwa ocena 28 Jadwiga 9 35,0 31 Lena 8 55,0 44 Grażyna 5 35,0 58 Robert 10 35,0 ocena Jadwiga 9 Robert 10 Grażyna 5 Robert 10 Wiek selekcja πsnazwa;ocena(σocena>8(S2)) snazwa ocena Jadwiga 9 Robert 10 64 ILOCZYN KARTEZJAŃSKI - operator, który bierze dwie relacje jako swój argument i produkuje w wyniku jedną relację złożoną ze wszystkich możliwych kombinacji wierszy z wejściowych tabel (w praktyce rzadko stosowany) [PRODUCT] RÓWNOZŁĄCZENIE - Operator, który bierze dwie relacje jako swój argument i produkuje w wyniku jedną relację wynikową, składającą się z wierszy, w których wartości w kolumnach złączenia są takie same (iloczyn kartezjański, a następnie selekcja) [EQUIJOIN] 65 S1 sid sname ocena R1 wiek 22 Dorota 7 45,0 31 Lena 8 55,5 58 Robert 10 35,0 sid bid dzien 22 101 10/10/04 58 103 11/12/04 iloczyn kartezjański S1 % R1 sid sname ocena wiek sid bid dzien 22 Dorota 7 45,0 22 101 10/10/04 22 Dorota 7 45,0 58 103 11/12/04 31 Lena 8 55,5 22 101 10/10/04 31 Lena 8 55,5 58 103 11/12/04 58 Robert 10 35,0 22 101 10/10/04 58 Robert 10 35,0 58 103 11/12/04 66 S1 sid sname ocena wiek 22 Dorota 7 45,0 31 Lena 55,5 58 Robert 10 8 R1 sid bid dzien 22 101 10/10/04 58 103 11/12/04 35,5 równozłączenie S1ÅR.sid=S.sidR1 sid sname 22 58 ocena wiek bid dzien Dorota 7 45,0 101 10/10/04 Robert 10 35,5 103 11/12/04 67 ZŁĄCZENIE NATURALNE – identyczne jak równozłączenie, ale bez powtarzających się kolumn złączenia (iloczyn kartezjański, selekcja, a następnie rzut, który nie bierze pod uwagę powtórzeń kolumn złączenia) [JOIN] ZŁĄCZENIE ZEWNĘTRZNE – pozwala zachować wiersze z każdej lub z obydwu relacji wejściowych, bez względu na to, czy mają odpowiadające sobie wiersze w drugiej relacji: 68 LEWOSTRONNE ZŁĄCZENIE – zachowuje nie pasujące wiersze z relacji będącej pierwszym argumentem operatora złączenia PRAWOSTRONNE ZŁĄCZENIE - zachowuje nie pasujące wiersze z relacji będącej drugim argumentem operatora złączenia OBUSTRONNE ZŁĄCZENIE - zachowuje nie pasujące wiersze z obydwu relacji będących argumentami operatora złączenia 69 SUMA – operator, który bierze dwie zgodne relacje (mają taką samą strukturę – te same kolumny określone na tych samych dziedzinach) i produkuje jedną relację wynikową [UNION] PRZECIĘCIE – operator o działaniu przeciwnym do działania sumy (suma uwzględnia wszystkie wiersze z obu relacji, przecięcie natomiast uwzględnia tylko wiersze wspólne dla obu relacji) [INTERSECTION] 70 S2 S1 sid sname ocena wiek 22 Dorota 7 45,0 31 Lena 55,5 58 Robert 10 8 35,5 sid sname ocena wiek 28 Jadwiga 9 35,0 31 Lena 8 55,5 44 Grażyna 5 35,0 58 Robert 10 35,5 suma (union) S1 4 S2 sid sname ocena wiek 22 Dorota 7 45,0 31 Lena 8 55,5 58 Robert 10 35,5 28 Jadwiga 9 35,0 44 Grażyna 5 35,0 71 S2 S1 sid sname ocena wiek 22 Dorota 7 45,0 31 Lena 55,5 58 Robert 10 8 35,5 sid sname ocena wiek 28 Jadwiga 9 35,0 31 Lena 8 55,5 44 Grażyna 5 35,0 58 Robert 10 35,5 przecięcie S1 3 S2 sid sname ocena wiek 31 Lena 8 55,5 58 Robert 10 35,5 72 RÓŻNICA - operator, który bierze dwie relację jako swój argument i produkuje w wyniku jedną relację wynikową, składającą się z wierszy znajdujących się tylko w pierwszej relacji (pierwszy argument) i nie znajdujących w drugiej relacji (drugi argument) [DIFFERENCE] 73 S2 S1 sid sname ocena wiek sid sname ocena wiek 22 Dorota 7 45,0 28 Jadwiga 9 35,0 31 Lena 55,5 31 Lena 8 55,5 58 Robert 10 35,5 44 Grażyna 5 35,0 58 Robert 10 35,5 8 różnica S1 – S2 sid 22 sname ocena Dorota 7 wiek 45,0 74 Tabele używane do demonstrowania złączeń, prezentowanych na następnych slajdach. 75 Iloczyn kartezjański Kod SQL iloczynu 76 LEWE ZŁĄCZENIE [ ZEWNĘTRZNE ] Oznacza, że z tabeli podanej po lewej stronie instrukcji złączenia zwrócone zostaną wszystkie rekordy. Dotyczy to również rekordów z lewej tabeli, które nie mają odpowiadających im rekordów w tabeli prawej. Wtedy kolumny z prawej tabeli zwracają wartości NULL. Wielu profesjonalistów rekomenduje konfigurację złączeń zewnętrznych jako lewych złączeń dla zachowania konsekwencji 77 Lewe złączenie [zewnętrzne] Kod SQL lewego złączenia 78 PRAWE ZŁĄCZENIE [ ZEWNĘTRZNE ] Zwrócone zostaną wszystkie rekordy z tabeli podanej po prawej stronie instrukcji złączenia, nawet jeśli nie istnieją pasujące rekordy w lewej tabeli. Kolumny z lewej tabeli zwracają wartości NULL 79 Prawe złączenie [zewnętrzne] Kod SQL prawego złączenia 80 ZŁĄCZENIE WEWNĘTRZNE Oznacza, że nie pasujące wiersze z obu tabel zostaną opuszczone. Jeśli w zapisie ANSI nie zostanie jawnie zdefiniowany typ złączenia, jest to zachowanie domyślne. 81 Złączenie wewnętrzne Kod SQL złączenia wewnętrznego 82 Instrukcja UNION (nie będąca częścią standardu SQL92) tworzy sumę dwóch lub więcej tabel. Oto jej składnia: [TABLE] Query (UNION [ALL] [TABLE] Query), ... Parametr Query reprezentuje instrukcję SELECT, nazwę procedury składowanej lub nazwę tabeli składowanej, poprzedzonej słowem kluczowym TABLE. Opcja ALL sprawia dodawanie wszystkich rekordów, jest więc zalecana nawet w przypadku braku powtarzających się wierszy. 83 9 Wszystkie kwerendy w operacji UNION muszą zwracać tę samą liczbę pól. Jednak pola te nie muszą mieć tego samego rozmiaru, ani typu danych 9 Składanie kolumn odbywa się według ich porządku w klauzulach kwerend, nie według ich nazw 9 W pierwszej instrukcji SELECT (jeżeli taka istnieje) można używać aliasów, aby zmienić nazwy zwracanych kolumn 9 Klauzulę ORDER BY można zastosować na końcu ostatniej kwerendy, aby nadać określony porządek zwracanym danym. Należy używać nazw kolumn z pierwszej kwerendy. 9 Klauzule GROUP BY i HAVING można użyć w każdym argumencie kwerendy w celu grupowania zwracanych danych 9 Tablicy wynikowej UNION nie można aktualizować 84 Poniższa instrukcja tworzy sumę wszystkich wierszy tabeli BOOKS oraz wierszy tabeli LIBRARY_FLAT, zawierających cenę większą od 25,00 zł (Price > 25.00), sortując tabelę wynikową według kolumny Title: TABLE BOOKS UNION ALL SELECT * FROM LIBRARY_FLAT WHERE Price > 25.00 ORDER BY Title 85 Tabele używane do demonstrowania instrukcji UNION 86 Widok tabeli wynikowej Kod SQL instrukcji UNION 87 Strukturalny język zapytań © Andrzej Barczak, Janusz Kosiń Kosiński 2004 88 W latach 1970, IBM zaprojektował produkt nazywany SEQUEL, lub strukturalny angielski język zapytań (Structured English Query Language), ostatecznie stał się on strukturalnym językiem zapytań Structured Query Language (SQL). IBM, wraz z innymi dostawcami relacyjnych baz danych, chciał stworzyć standardową metodę dostępu do danych i manipulacji nimi w relacyjnych bazach danych. Przez dekady, wiele konkurujących języków pozwalało programistom i dostawcom na te operacje, jednakże tylko nieliczne z nich były łatwe do nauczenia i powszechnie akceptowane, jak SQL. Programiści i dostawcy odnoszą obecnie korzyści z uczenia się języka, który – z niewielkimi modyfikacjami – ma zastosowanie w wielu różnorodnych aplikacjach i produktach związanych z bazami danych. 89 Systemy zarządzania relacyjnymi bazami danych (systemy RDBMS – Relational Database Management Systems), takie jak SQL Server i Oracle są podstawowymi mechanizmami stosowanymi w systemach informacyjnych na świecie, szczególnie w aplikacjach internetowych / intranetowych i rozproszonych systemach przetwarzania typu klientserwer. RDBMS jest zdefiniowany jako system, którego użytkownicy widzą dane jako zbiór tabel powiązanych miedzy sobą poprzez wspólne wartości danych. Dane są przechowywane w tabelach, zaś tabele są zbudowane z rekordów i kolumn. Tabele zawierające niezależne dane mogą być łączone pomiędzy sobą, jeśli zawierają kolumny danych (zwanych kluczami), które mają tę samą wartość. 90 Standard SQL Dla wprowadzenia większej zgodności pomiędzy dostawcami, Amerykański Instytut Normalizacyjny (ANSI – American National Standard Institute). ANSI opublikował swój pierwszy standard języka SQL, w 1986 roku. Drugi, szeroko zaakceptowany standard powstał w roku 1989. W roku 1992, ANSI opublikował uaktualnienia znane jako SQL92 i SQL2, zaś w 1999 roku, powstałą wersja znana pod dwiema nazwami SQL99 i SQL3. Międzynarodowa Organizacja Normalizacyjna (ISO) zatwierdziła SQL99 jako swój standard. 91 Klasy instrukcji w SQL99 Porównanie klas instrukcji określa SQL92 i SQL99. W SQL92, instrukcje SQL byty zgrupowane w trzech kategoriach: język manipulacji danymi – DML (Data Manipulation Language), język definiowania danych DDL - (Data Definition Language) i język kontroli danych – DCL (Data Control Language). DML dostarcza specyficznych poleceń manipulacji danymi, takich jak SELECT, INSERT, UPDATE, i DELETE. DDL zawiera polecenia, które służą do dostępu do i tworzenia obiektów baz danych, takie jak CREATE i DROP DCL zawiera polecenia dotyczące uprawnień GRANT i REVOKE. W przeciwieństwie do poprzednika, SQL99 definiuje siedem kategorii, które tworzą ogólną strukturę typów instrukcji dostępnych w języku SQL. Te „klasy” instrukcji różnią się nieznacznie od klas zdefiniowanych w SQL92, ponieważ próbują identyfikować instrukcje wewnątrz każdej z nich ściślej i w sposób bardziej logiczny. 92 Klasa Instrukcje obsługi połączeń SQL Instrukcje kontrolne SQL Przykładowe Opis polecenia Otwarcie i zamknięcie połączenia z klientem CONNECT, DISCONNECT Kontrolowanie wykonania zbiorów instrukcji CALL, RETURN Wywieranie trwałych efektów SELECT, INSERT, Instrukcje obsługi danych SQL na danych UPDATE, DELETE Instrukcje diagnostyczne SQL Instrukcje obsługi schematów SQL Instrukcje obsługi sesji SQL Instrukcje obsługi transakcji SQL Zgłaszanie wyjątków i błędów Wywieranie trwałych efektów na schematy baz danych i obiekty wewnątrz schematów Kontrolowanie zachowań domyślnych i innych parametrów Ustalanie początkowych i końcowych punktów transakcji GET DIAGNOSTICS ALTER, CREATE, DROP SET COMMIT, ROLLBACK 93 Dialekty SQL Ciągła ewolucja SQL spowodowała wzrost liczby dialektów SQL stosowanych przez różnych dostawców w różnych produktach. Te dialekty powstawały w wyniku oczekiwań użytkowników na nowe możliwości przed stworzeniem przez ANSI nowych standardów. Na przykład, wielu dostawców zwiększa swoją ofertę o możliwości współpracy z językiem Java (Oracle i Sybase) czy VBScript (Microsoft). Pomimo to, każdy z tych dialektów zawiera przetwarzanie warunkowe (IF . . . THEN), funkcje sterujące przepływem (pętla WHILE), zmienne i obsługę błędów. Ponieważ ANSI nie stworzył jeszcze standardów obejmujących te ważne cechy, projektanci i dostawcy systemów RDBMS mogli tworzyć własne polecenia i składnię. W rezultacie produkty kilku najstarszych dostawców (od lat 1980) różnią się w sposobie rozumienia podstawowych poleceń takich jak SELECT, ponieważ ich implementacje powstały wcześniej niż standard. 94 Niektóre z tych dialektów wprowadzają polecenia proceduralne, aby wpierać możliwości bardziej kompletnych języków programowania. Na przykład implementacje proceduralne zawierają polecenia obsługi błędów, kontroli przepływu, instrukcje warunkowe, obsługę zmiennych, tablice i wiele innych rozszerzeń – są one dialektami pomimo, że technicznie są to rozbieżne implementacje. Niektóre popularne dialekty SQL, to: PL/SQL Stworzony przez Oracle. PL/SQL nazwa pochodzi od Procedural Language/SQL i zawiera wiele podobieństw do języka Ada. Transact-SQL Używany przez Microsoft SQL Server i Sybase Adaptive Server. Gdy Microsoft i Sybase odsunęły się od wspólnej platformy, która posiadały we wczesnych latach 1990, ich implementacje Transact-SQL też się zróżnicowały. PL/pgSQL Jest to nazwa i rozszerzenie zaimplementowane w PostgreSQL. Skrót pochodzi od Procedural Language/postgreSQL. 95 Instrukcje języka SQL mogą być analizowane, kompilowane i wykonywane na różne sposoby, szczególnie jeśli są używane różne style powiązane: SQL Module Language Powoduje, że instrukcje SQL są przygotowywane podczas tworzenia modułów i wykonywane, gdy moduł jest wywoływany (jak np. Procedura składowana). Embedded SQL Syntax Pozwala na przygotowanie instrukcji SQL podczas prekompilacji programu w jego języku podstawowym i wykonywanie podczas wywoływania tego programu (jak np. PRO*C czy PRO*Fortran). Direct SQL Invocation powoduje, że statyczna instrukcja SQL jest przygotowana i natychmiast wykonywana. Zatem różnice w stylach powiązanych, są jeszcze jednym powodem różnego funkcjonowania różnych DBMS. 96 kategoria przykładowe typy danych i skróty opis Binary (binarne) binary large object (BLOB) Ten typ danych przechowuje wartości łańcuchowe w formacie szesnastkowym. Bit string (łańcuchy bitowe) bit bit varying Ten typ danych przechowuje dane binarne i szesnastkowe. BIT ma stałą długość, zaś BIT VARYING zmienną długość Boolean (logiczne) boolean Ten typ danych przechowuje wartości logiczne: TRUE (prawda), FALSE (fałsz) lub UNKNOWN (nieznana). Character (znakowe) char character varying Ten typ danych przechowuje dowolne kombinacje znaków z odpowiedniego zestawu. Typy zmiennej długości (varying) mogą przechowywać dane dowolnej, pozostałe zaś – wyłącznie określonej długości. Typy zmiennej długości automatycznie dostosowują swój rozmiar do zawartości, usuwając spacje, pozostałe zaś zachowują swoją wielkość bez względu na faktyczny rozmiar przechowywanych danych. (VARCHAR) national character (NCHAR) national character varying (NVARCHAR) character large object (CLOB) national character large object (NCLOB) 97 kategoria przykładowe typy danych i skróty opis Numeric (liczbowe) integer (INT) smallint numeric decimal (DEC) float(p,s) real double precision Ten typ danych przechowuje wartości ldokładne (całkowite lub dziesiętne) lub przybliżone (zmiennoprzecinkowe). INT i SMALLINT przechowują wartości dokładne z predefiniowaną precyzją I skalą równą 0. NUMERIC i DEC przechowują wartości dokładne z predefiniowaną precyzją i definiowalną skalą. FLOAT przechowuje wartości przybliżone z definiowalną skalą, podczas gdy REAL i DOUBLE PRECISION mają predefiniowaną precyzję. Precyzję (p) i skalę (s) można odpowiednio definiować dla określenia dopuszczalnej liczby cyfr i liczby miejsc dziesiętnych. Temporal (czasowe) date time time with time zone timestamp timestamp with time zone interval Ten typ danych przechowuje wartości związane z czasem. DATE i TIME nie wymagają wyjaśnień. Typy z przyrostkiem WITH TIME ZONE (ze strefą czasową) zawierają znacznik strefy. Typy TIMESTAMP są wyliczane podczas działania komputera. INTERVAL określa odcinek czasu. 98 Kategorie składni Polecenia SQL zawierają trzy kategorie składni: identyfikatory, literały oraz słowa kluczowe i zarezerwowane: Identyfikatory to nazwy obiektów stworzonych przez użytkownika lub proces systemowy, taki jak bazy danych, tabele, kolumny w tabelach czy perspektywy. Literały to wartości (nie będące wartościami NULL) wprowadzone do systemu. Słowa kluczowe i zarezerwowane na przykład SELECT, GRANT, DELETE czy CREATE to słowa mające specjalne znaczenie dla parsera (analizatora składni) bazy danych SQL. 99 Identyfikatory Należy pamiętać, że RDBMS są oparte na teorii mnogości: klastry zawierają zbiory katalogów, katalogi zawierają zbiory schematów, schematy zawierają zbiory obiektów, itd. Na każdym poziomie tej struktury wszystkie elementy muszą mieć unikatowe nazwy czy identyfikatory. Oznacza to, że każdy obiekt (bez względu na to, czy jest to baza danych, tabela, perspektywa, kolumna, indeks, wyzwalacz, procedura składowana czy więzy) w systemie RDBMS musi mieć nazwę. Gdy wydawane jest plecenie tworzące obiekt na serwerze konieczne jest podanie dla tego nowego obiektu nazwy. 100 Są dwa zbiory reguł, stosowane przez doświadczonych programistów, podczas wybierania identyfikatora dla konkretnego obiektu: ! pierwszy zbiór reguł zawiera logiczne zasady i konwencje, które pozwalają na tworzenie lepszych struktur danych. Ich stosowanie nie jest wymagane przez język SQL, ale warto je wziąć pod uwagę, ponieważ wynikają z praktycznego doświadczenia. ! drugi zbiór zawiera reguły zdefiniowane w standardzie języka SQL, które zostały zaimplementowane przez dostawców. 101 KONWENCJE DOTYCZĄCE NAZW (oparte na wieloletnim doświadczeniu programistów) Wybierz nazwę mającą znaczenie, istotną i opisującą Nie nazywaj np. bazy danych WD03; zamiast tego nazwij ją Wydatki_2003, co pozwala na stwierdzenie, że przechowywane dane dotyczą wydatków poniesionych w roku 2003. Każdy dostawca bazy danych wprowadza limity dotyczące długości nazw ale można stosować zrozumiałe skróty. Wybierz i stosuj tę samą wielkość znaków w nazwach należy używać nazw zbudowanych bądź z samych wielkich lub samych małych liter dla wszystkich obiektów w bazie. Warto pamiętać, że niektóre serwery baz danych są wrażliwe na wielkość liter. Używaj skrótów konsekwentnie jeżeli już raz zastosowałeś skrót, powinien być stosowany konsekwentnie w całej bazie danych. Na przykład, jeżeli skrót PRAC został zastosowany dla PRACOWNIK, to PRAC powinien być stosowany konsekwentnie w całej bazie danych. 102 Stosuj kompletne, mające znaczenie, nazwy z podkreśleniami Nazwa kolumny DUZELITERYZPODKRESLENIAMI nie jest tak czytelna jak DUZE_LITERY_Z_PODKRESLENIAMI. Nie umieszczaj nazwy firmy czy produktu w nazwach obiektów Firmy rozwijają się a produkty zmieniają nazwy. To są zbyt krótkotrwałe elementy aby włączać je do obiektów baz danych. Nie stosuj oczywistych przedrostków i przyrostków Nie powinno się rozpoczynać nazwy bazy danych od „DB_”, czy nazwy każdej perspektywy od „P”. Czasami przyrostki i przedrostki są bardzo użyteczne, jeśli są stosowane konsekwentnie. Nie twórz nazw obiektów wypełniających całe dostępne miejsce Jeżeli system bazy danych pozwala na 32 znakowe nazwy tabel, warto zostawić kilka pustych miejsc. Niektóre systemy dodają czasem do nazw przedrostki lub przyrostki podczas manipulacji tymczasowymi kopiami tabel. Nie używaj identyfikatorów w cudzysłowach 103 Zasady tworzenia nazw Poniżej przedstawione są zasady nazywania obiektów zdefiniowane w standardzie SQL99: • identyfikator nie może być dłuższy niż 128 znaków. (wiele baz danych ogranicza go do 32 lub mniej znaków) • identyfikator może zawierać cyfry, litery i symbole. • identyfikator musi zaczynać się od litery (lub innego dopuszczalnego symbolu). • identyfikator nie może zawierać spacji, ani innych znaków specjalnych. • identyfikator nie może być słowem kluczowym czy zarezerwowanym. 104 • w wielu przypadkach, identyfikatory muszą być unikatowe dla każdego właściciela wewnątrz jego zakresu. Na przykład, jakkolwiek Oracle pozwala stworzyć dwa obiekty o tej samej nazwie w dwóch odrębnych schematach, generalnie jednak wszystkie bazy danych i wszystkie tabele wewnątrz bazy danych powinny mieć unikatowe nazwy. • identyfikatory w cudzysłowach (nazwy obiektów wzięte w cudzysłów) mogą być użyte do złamania niektórych powyżej wymienionych zasad. Na przykład, tabela może mieć nazwę „stawki##podatku”, ale nie stawki##podatku ponieważ pierwszy identyfikator jest wzięty w cudzysłów. Tego typu identyfikatory są czasem nazywane identyfikatorami ograniczonymi (delimited identifiers.) 105 Literały SQL uznaje za literał każdą wartość liczbową, znakową ,łańcuchową, czasową czy logiczną, która nie jest identyfikatorem. Bazy danych SQL pozwalają na używanie w programach SQL wielu rodzajów literałów. Na przykład, SQL Server ma wśród typów liczbowych takie jak (między innymi): integer, real, i money. Wtedy literały liczbowe mogą wyglądać następująco: 30 -117 +883.3338 -6.66 $70000 2E5 7E-3 106 Jak widać z przykładu, SQL Server dopuszcza liczby ze znakiem lub bez, w notacji zwykłej lub naukowej. Ponieważ SQL ma typ danych money, można umieszczać w literałach znak dolara ($). SQL nie zezwala na używanie w literałach liczbowych, znaków innych niż: 0 1 2 3 4 5 6 7 8 9 + -$ . E e zatem nie pozwala na użycie przecinka. Większość baz danych interpretuje przecinek jako symbol oddzielający elementy. Np. wartość 3,000 będzie zinterpretowana przez bazę danych jako 3 i, oddzielnie, 000. 107 Literały znakowe i łańcuchowe powinny być ograniczane przez znaki apostrofu (‘ ’). SQL pozwala również na stosowanie znaków cudzysłowu, pod warunkiem, że literał jest ograniczony z obu stron w ten sam sposób. Jedyną różnicą pomiędzy literałem znakowym a łańcuchowym jest to, ze literał znakowy zawiera tylko jeden znak, zaś łańcuchowy wiele znaków. Dodatkowo, literały znakowe i łańcuchowe nie ograniczają się wyłącznie do alfabetu. W praktyce, każdy drukowalny znak z zestawu znaków serwera może być reprezentowany jako literał. 108 Wszystkie poniższe łańcuchy są literałami: ‘2004' '$70,000 + 14000' ‘Był sobie raz człowiek z Nantucket,' 'Oct 28, 2003' Przykłady te są zgodne z typem danych CHARACTER. Nie należy mylić literału łańcuchowego ‘2004’ z literałem liczbowym 2004 . Z jednej strony literały łańcuchowe są związane z typami danych CHAR i nie mogą być stosowane w operacjach arytmetycznych. Z drugiej strony wiele produktów baz danych przeprowadza automatyczną konwersję literałów łańcuchowych podczas porównywania z typami danych DATE. 109 Operatory i ograniczniki systemowe Ograniczniki łańcuchów wyznaczają granice łańcucha znaków alfanumerycznych. Ograniczniki systemowe powodują, że znaki umieszczone pomiędzy nimi mają specjalne znaczenie dla serwera baz danych. Ograniczniki są symbolami, które pozwalają wyznaczyć hierarchię działań i elementów list. Operatory to symbole używane do oceniania wyniku operacji porównywania oraz symbole używane w operacjach arytmetycznych i matematycznych. 110 Symbol Użycie + Operator dodawania lub konkatenacji - Operator odejmowania lub wskaźnik zasięgu w wiezach * Operator mnożenia / Operator dzielenia = Operator równości (lewa strona jest równa prawej) <> != Operator różności (lewa strona jest różna od prawej) < Operator mniejszości > Operator większości <= Operator „mniejsze lub równe” >= Operator „większe lub równe” ( Ogranicznik wyrażenia lub hierarchii ) Ogranicznik wyrażenia lub hierarchii 111 Symbol Użycie % Symbol wieloznaczny , Separator elementów list @ Oznaczenie zmiennej lokalnej @@ Oznaczenie zmiennej globalnej . Kwalifikator oddzielający ‘‘ ”” Oznaczenie łańcucha znakowego ”” Oznaczenie identyfikatora ograniczonego -- Oznaczenie komentarza jednoliniowego /* Oznaczenie początku komentarza wieloliniowego */ Oznaczenie końca komentarza wieloliniowego 112 Słowa kluczowe i zarezerwowane Tak jak pewne symbole pełnią w SQL specjalne funkcje, tak pewne słowa lub wyrażenia mają również specjalne znaczenie. Słowa kluczowe języka SQL, to wyrażenia, których znaczenie jest tak związane z operacjami wewnątrz RDBMS, że ich użycie w jakimkolwiek innym celu nie jest dozwolone; generalnie są to słowa występujące w poleceniach SQL. Na przykład słowo SELECT nie może wystąpić w nazwie tabeli. Dobrym pomysłem jest unikanie umieszczania w nazwach kolumn czy tabel słów kluczowych występujących w innych systemach baz danych, ponieważ aplikacje baz danych są często konwertowane z jednej implementacji na inną. 113 Słowa zarezerwowane to wyrażenia, które nie mają specjalnego znaczenia teraz, ale prawdopodobnie będą je miały w następnych wersjach Dlatego są one zarezerwowane i nie powinny występować w nazwach obiektów. W przeciwieństwie do słów kluczowych, słowa zarezerwowane nie zawsze są wyrażeniami stosowanymi w poleceniach SQL. Większość tych słów jest związana z technologiami baz danych, ale nie muszą mieć one wyraźnego związku z poleceniami SQL.. 114 Stosowanie języka SQL Najważniejszym w SQL jest polecenie SELECT, oraz związane z nim zastosowania – relacyjne operacje, znane jako: rzutowanie, selekcja i złączenie. Uproszczony przykład składni instrukcji SELECT jest przedstawiony poniżej: SELECT lista_wyboru FROM lista_tabel WHERE kryteria_wyszukiwania Poniższa instrukcja zawiera w sobie dwie z trzech operacji relacyjnych: selekcję i rzutowanie: SELECT data_wydatku, wysokość_wydatku, opis_wydatku FROM wydatki WHERE imie_pracownika = ‘Elmer‘ AND nazwisko_pracownika = ‘Fudd' 115 Rzutowanie Rzutowanie (projekcja) to relacyjna operacja wybierania z tabeli konkretnych kolumn danych. Poniżej przedstawione jest zapytanie, które z tabeli autorzy wybiera imię, nazwisko i stan zamieszkania autora: SELECT au_imie, au_nazwisko, stan FROM autorzy wyniki każdego zapytania SELECT tego typu są przedstawiane jako kolejna tabela, zawierająca wybrane dane: au_imie -------------------Jon Adam Mary au_nazwisko -----------------Marjorie Smith Pickford stan ------CA CA CA Tabela zawierająca wynik jest nazywana tabelą roboczą lub tabelą pochodną. 116 Selekcja Selekcja jest relacyjną operacją wybierania z tabeli konkretnych rekordów. Przeprowadzenie takiej operacji umożliwia klauzula WHERE instrukcji SELECT. Działanie WHERE polega na odfiltrowaniu niepotrzebnych rekordów i przedstawieniu jedynie rekordów żądanych. Poniższe zapytanie, otrzymane przez przebudowanie poprzedniego przykładu, pozwala na wybranie autorów, którzy nie mieszkają w Kaliforni: SELECT au_imie FROM autorzy WHERE stan <> ‘CA’ au_imie -------------------Jon Adam Mary Innes au_nazwisko stan ------------------ ------Smith KS Greene TN Blotchet-Halls OR del Castillo MI Łącząc mozliwości rzutowania i selekcji w jednym zapytaniu, SQL pozwala wybierać tylko żądane kolumny i rekordy 117 Złączenia Złączenia są jednymi z najważniejszych w relacyjnej bazie danych. Złączenie umieszcza dane z jednej lub kilku tabel w zbiorze wyników za pomocą jednego zapytania. Różni dostawcy pozwalają na różne liczby tabel w jednej operacji złączenia. (Oracle nie ogranicza liczby tabel, ale Microsoft SQL Server pozwala na nie więcej niż 256 tabel w jednej operacji złączenia.) Tworzenie złączeń w standardzie ANSI polega na użyciu klauzuli JOIN w instrukcji SELECT. Starsza metoda, znana jako złączenie theta, dokonuje tej operacji w kluzuli WHERE. Na następnym slajdzie podane są przykłady obu metod: 118 wg. Standardu ANSI ---------------------------------SELECT pr.id_pracownika, złączenie THETA ------------------------------SELECT pr.id_pracownika, pr.imie_pracownika, pr.nazwisko_pracownika, j.opis_pracy FROM pracownicy pr, JOIN prace j ON pr.id_pracy = j.id_pracy pr.imie_pracownika, pr.nazwisko_pracownika, j.opis_pracy FROM pracownicy pr, prace j WHERE pr.id_pracy = j.id_pracy Wymagane są wszystkie rekordy z tabeli pracownicy, zaś wartości z tabeli prace są opcjonalne i dołączane tylko wtedy, gdy wartości w obu tabelach pasują do siebie 119 Klauzula WHERE jest bardzo ważną częścią instrukcji SELECT. Klauzula WHERE zawiera większość warunków wyszukiwania, które odrzucają niepożądane dane z zapytania; pozostałe warunki wyszukiwania są umieszczone w klauzuli HAVING. Źle napisana klauzula WHERE może zrujnować całkowicie instrukcję SELECT, dlatego jest bardzo ważne opanowanie niuansów tej klauzuli. Na następnej stronie przedstawiony jest przykład wieloczęściowej klauzuli WHERE: 120 SELECT a.au_imie, a.au_nazwisko, t2.tytul, convert(char,t2.data_publikacji) FROM autorzy a JOIN autorzy_tytuly t1 ON a.au_id = t1.au_id JOIN tytuly t2 ON t1.id_tytulu = t2.id_tytulu WHERE (t2.typ = 'business' OR t2.typ = 'popularna_komputerowa') AND t2.zaliczka> $5500 ORDER BY t2.tytul Należy zwrócić uwagę, że nawiasy ustalają porządek wykonywania działań w klauzuli WHERE według priorytetu operatorów 121 Warunek Prosty warunek logiczny Składnia Przykład WHERE[NOT] SELECT au_id Do porównania wyrażeń można użyć wyrażenie FROM autorzy operator_porównania WHERE au_id =‘172-32-1176’ operatorów <, >, < >, >, <= oraz =. Istnieją również operatory porównania specjalne, jak LIKE. wyrażenie SELECT au_id FROM autorzy WHERE au_nazwisko NOT LIKE ‘John%‘ Złożony warunek logiczny Użycie i opis WHERE[NOT] SELECT au_id wyrażenie FROM autorzy operator_porównania WHERE au_id = ‘172-32-1176’ wyrażenie AND au_nazwisko =‘WHITE’ {AND|OR} wyrażenie operator_porównania wyrażenie Słowo kluczowe NOT sprawdza odwrotność warunku podanego za pomocą w/w operatorów oraz operatorów specjalnych LIKE, NULL, BETWEEN IN, EXIST, ANY i ALL AND łączy wiele operatorów i zwraca wynik, jeśli oba warunki są spełnione. AND ma wyższy priorytet od pozostałych. Nawiasy w klauzuli WHERE wpływają na priorytet operatorów. OR łączy warunki i zwraca wartość. Priorytet OR jest niższy niż AND 122 Warunek Składnia Przykład Użycie i opis Sprawdze nie wartości NULL WHERE[NOT] SELECT * IS NULL oraz nazwa kolumny IS FROM tytuly [NOT]NULL WHERE cena IS NULL IS NOT NULL powodują sprawdzenie występowania wartości null (lub wszystkich wartości poza null) Sprawdze nie więzów WHERE[NOT] SELECT a.au_imie, wartość(i)_kolumny a.au_nazwisko, [(+)]=[(+)] t2.tytul wartość(i)_kolumny FROM autorzy a, lub autorzy_tytuly t1, WHERE[NOT] tytuly t2 wartość(i)_kolumny WHERE a.au_id = t1,au_id [*]=[*] AND wartość(i)_kolumny t1.id_tytulu = t2.id_tytulu Sprawdzenie więzów może być przeprowadzone przez obliczenie wspólnego klucza dla dwóch lub większej liczby tabel ORDER BY t2.tytul Sprawdze nie wzorca WHERE[NOT] wartość(i)_kolumny [NOT]LIKE ‘łańcuch_wzorca’ /* wybranie wszystkich numerów rozpoczynających się od 415 */ LIKE powoduje zastosowanie dopasowania wzorca podanego, jako łańcuch w apostrofach SELECT * FROM autorzy WHERE telefon LIKE ‘415%’ 123 Warunek Sprawdze nie istnienia Składnia Przykład WHERE[NOT] SELECT pl.nazwa_wydawcy EXISTS FROM wydawcy pl (podzapytanie) WHERE EXISTS (SELECT * FROM tytuły WHERE Użycie i opis EXISTS jest stosowane zawsze w połączeniu z podzapytaniem; podzapytanie to raczej sprawdza istnienie danych, niż je zwraca. Przykład ilustruje zwrócenie wszystkich wydawców książek o psychologii id_wydawcy = pl.id_wydawcy AND typ = ‘psychologia’) Sprawdze nie zakresu BETWEEN WHERE[NOT] SELECT * wyrażenie[NOT] FROM tytuly BETWEEN wyrażenie WHERE roczna_sprzedaz AND wyrażenie Sprawdze nie zakresu IN WHERE[NOT] wyrażenie [NOT]IN (lista_wartosci | podzapytanie) BETWEEN 4000 AND 9000 /* wybranie wszystkich numerów rozpoczynających się od 415 */ SELECT * FROM autorzy WHERE telefon LIKE ‘415%’ BETWEEN sprawdza czy wyrażenie należy do zakresu. Działa identycznie z: WHERE(wyrazenie >=x AND wyrażenie <= y) IN zwraca zbiór wartości, które pasują do dowolnej wartości z listy lub dowolnego rekordu wynikowego podzapytanie lista wartości i podzapytanie powinny być ujęte w nawiasy 124 Warunek Sprawdze nie zakresu SOME i ALL Składnia WHERE[NOT] wyrażenie operator_porównania Przykład -- działa tak samo jak IN SELECT au_nazwisko, au_imie {[ANY|SOME]| ALL} FROM (podzapytanie) WHERE miasto = ANY autorzy (SELECT miasto FROM wydawcy) -- działa tak,jak NOT IN Użycie i opis ALL oraz SOME są zawsze stosowane z podzapytaniem i operatorem porównania, takim jak Zapytanie z ALL zwraca TRUE lub FALSE, jeśli wszystkie wartości podzapytania pasują do wartości klauzuli WHERE (lub HAVING) lub jeśli podzapytanie nie zwraca żadnych wierszy SELECT au_nazwisko, au_imie FROM autorzy WHERE miasto <> ALL (SELECT miasto FROM wydawcy) -- działa tak,jak NOT IN SELECT tytul, FROM SOME działa tak samo jak EXISTS. Działa podobnie jak ALL, poza tym że zwraca TRUE, jeśli jakakolwiek z wartości zwróconych przez podzapytanie spełnia warunek porównania w klauzuli WHERE zewnętrznej instrukcji tytuly WHERE zaliczka > ANY (SELECT miasto FROM wydawcy) 125 Warunek Sprawdze nie zakresu SOME i ALL (c.d.) Składnia WHERE[NOT] wyrażenie operator_porównania {[ANY|SOME]| ALL} (podzapytanie) Przykład Użycie i opis /* wszystkie tytuły, które mają zaliczkę wiekszą niż minimalna zaliczka płacona w NEW Moon Books */ SELECT tytul, FROM tytuly WHERE zaliczka > ANY (SELECT zaliczka FROM wydawcy, tytuly) WHERE tytuly.id_tytulu = wydawcy.id_tytulu AND nazwa_wydawcy = ‘NEW Moon Books’) 126 Klauzula ORDER BY jest również ważną częścią instrukcji SELECT. Zbiór wyników może być posortowany według porządku sortowania określonego w bazie danych. Sortowanie może być rosnące (ASC) lub malejące (DESC). Porządek rosnący jest domyślny. Jeśli ta klauzula nie zostanie podana, to w większości implementacji rekordy zostaną zwrócone w kolejności fizycznego występowania w tabeli lub zgodnie z zastosowanym w zapytaniu indeksem. Może to powodować problemy, jeśli indeks czy fizyczny porządek danych zmieni się. Warto zatem zdefiniować porządek jawnie. 127 Przykład klauzuli ORDER BY -- zapytanie SELECT p.id_prac „ID pracownika”, rtrim(p.imie) || rtrim(p.nazwisko) ”Imię i nazwisko”, s.id_stan „Stanowisko”, FROM pracownicy p, stanowiska s WHERE p.id_stan = s.ic_stan AND p.nazwa = ‘Acquisitions Manager”, ORDER BY p.imie DESC p.nazwisko ASC 128 -- wyniki ID pracownika ------------------------- Imię i nazwisko ----------------------------- Stanowisko -------------------- M-R38834F Manager Marta Rojek Acquisition MAS7046F Manager Maria Siwecka Acquisition KJJT56-23F Manager Katarzyna Jabłońska Acquisition GHT50522M Manager Grzegorz Tomaszewski Acquisition Po stworzeniu zbioru wyników zgodnego z warunkami wyszukiwania, jest on sortowany według imienia pracownika w porządku malejącym. Jeśli imiona są takie same, następuje sortowanie według nazwisk w porządku rosnącym. 129 Normalizacja 130 NORMALIZACJA jest PROCESEM IDENTYFIKOWANIA logicznych związków między elementami danych oraz projektowania bd w taki sposób, aby reprezentowała (odwzorowywała) ona te związki, ale bez występowania anomalii korzystania z plików bd LOGICZNE ZWIĄZKI między elementami danych nazywamy ZWIĄZKAMI ZALEŻNOŚCI lub DETERMINOWANIA 131 ZALEŻNOŚĆ (determinowanie) między elementami danych wskazuje KIERUNEK W ZWIĄZKU Jeżeli element danych A jest elementem DETERMINUJĄCYM, zaś B ZALEŻNYM elementem danych, to kierunek związku jest od A do B, a nie odwrotnie. A B 132 ISTNIEJĄ DWA GŁÓWNE TYPY ZALEŻNOŚCI: 9 ZALEŻNOŚCI FUNKCYJNE (jednowartościowe) 9 ZALEŻNOŚCI NIEFUNKCYJNE (wielowartościowe) Element danych B jest FUNKCYJNIE ZALEŻNY od elementu A, jeżeli dla każdej wartości A istnieje JEDNA, JEDNOZNACZNIE OKREŚLONA wartość B. Element danych B jest niefunkcyjnie zależny od elementu danych A, jeżeli dla każdej wartości A istnieje OGRANICZONY ZBIÓR WARTOŚCI danych B. 133 Moduły Nazwa_modulu Nr_prac Nazw_pracownika Nr_studenta Nazw_studenta Ocena Typ_oceny SRBD 315 SZYMCZYK 54678 STAŃCZAK B3 K1 SRBD 315 SZYMCZYK 54678 STAŃCZAK B1 K2 SRBD 315 SZYMCZYK 55675 TOMCZAK B2 K1 SRBD 315 SZYMCZYK 52378 FUJARSKI B3 K1 SRBD 315 SZYMCZYK 52378 FUJARSKI B1 K2 PRBD 315 SZYMCZYK 54678 STAŃCZAK B3 K1 PRBD 315 SZYMCZYK 53276 CZERWIŃSKI B2 K1 DBD 415 PAWŁOWSKI 57111 POLACZEK A1 EGZAMIN Usunięcie studenta nr 57111 ? tracimy informacje nt. DBD i powiązanego z tym przedmiotem wykładowcy – EFEKT UBOCZNEGO USUNIĘCIA Zmiana wykładowcy DBD ? należy zmienić także numer wykładowcy - EFEKT UBOCZNEJ MODYFIKACJI Wpisanie nowego studenta na moduł ? nie możemy wprowadzić rekordu studenta dopóty, dopóki nie będzie przynajmniej jednego zaliczenia – EFEKT UBOCZNEGO WSTAWIENIA. 134 Moduły Nazwa_modulu Nr_prac Nazw_pracownika Nr_studenta Nazw_studenta Ocena Typ_oceny SRBD 315 SZYMCZYK 54678 STAŃCZAK B3 K1 SRBD 315 SZYMCZYK 54678 STAŃCZAK B1 K2 SRBD 315 SZYMCZYK 55675 TOMCZAK B2 K1 SRBD 315 SZYMCZYK 52378 FUJARSKI B3 K1 SRBD 315 SZYMCZYK 52378 FUJARSKI B1 K2 PRBD 315 SZYMCZYK 54678 STAŃCZAK B3 K1 PRBD 315 SZYMCZYK 53276 CZERWIŃSKI B2 K1 DBD 415 PAWŁOWSKI 57111 POLACZEK A1 EGZAMIN Tabela MODUŁY nie stanowi logicznej reprezentacji zdefiniowanej relacji; Komórka tabeli dla atrybutów Nr_studenta, Nazw_studenta, Ocena i Typ_oceny zawiera wiele wartości; Nr_studenta, Nazw_studenta, Ocena i Typ_oceny powtarzają się względem atrybutu Nazwa_modułu. 135 Relacja jest w 1NF wtedy i tylko wtedy, gdy każdy jej atrybut NIEKLUCZOWY jest FUNKCYJNIE ZALEŻNY od KLUCZA GŁÓWNEGO; Atrybuty Nr_studenta, Nazw_studenta, Ocena i Typ_oceny nie są funkcyjnie zależne od klucza głównego Nazwa_Modulu; Natomiast atrybuty Nr_prac i Nazw_pracownika są funkcyjnie zależne; Oznacza to konieczność utworzenia dwóch tabel: * Dla atrybutów funkcyjnie zależnych; * Dla atrybutów funkcyjnie niezależnych. 136 Moduły Nazwa_modulu Nr_prac Nazw_pracownika SRBD 315 SZYMCZYK PRBD 315 SZYMCZYK DBD 415 PAWŁOWSKI Klucz główny Nazwa_ modułu PIERWSZA POSTAĆ NORMALNA Zaliczenia Nazwa_modulu Nr_studenta SRBD 54678 SRBD Ocena Typ_oceny STAŃCZAK B3 K1 54678 STAŃCZAK B1 K2 SRBD 55675 TOMCZAK B2 K1 SRBD 52378 FUJARSKI B3 K1 SRBD 52378 FUJARSKI B1 K2 PRBD 54678 STAŃCZAK B3 K1 PRBD 53276 CZERWIŃSKI B2 K1 DBD 57111 POLACZEK A1 EGZAMIN © Andrzej Barczak, Janusz Kosiń Kosiński 2004 Nazw_studenta Klucz główny Nazwa_modulu, Nr_studenta, Typ_oceny 137 Atrybut B relacji jest w pełni funkcyjnie zależny od atrybutu A tej relacji (który może być atrybutem złożonym, tj. zbiorem atrybutów prostych) Jeśli JEST FUNKCJONALNIE ZALEŻNY OD NIEGO, ale nie jest funkcjonalnie zależny od żadnego podzbioru zbioru A. Relacja jest w 2NF wtedy i tylko wtedy, gdy jest w 1NF i każdy atrybut niekluczowy /nie należący do żadnego klucza/ jest w pełni funkcyjnie zależny od klucza głównego (inaczej mówiąc przy przeprowadzeniu relacji z 1NF do 2NF należy usunąć niepełne zależności funkcyjne tj. atrybuty zależne od części klucza); © Andrzej Barczak, Janusz Kosiń Kosiński 2004 138 TABELA ZALICZENIA: * * Potrzebne są wszystkie elementy klucza aby wyznaczyć ocenę; * * Nazwa_modulu i Typ_oceny NIE MAJĄ ŻADNEGO WPŁYWU na Nazw_studenta Nr_studenta SAM DETERMINUJE Nazw_studenta; * * Dlatego rozdzielamy determinujące i zależne elementy danych na osobne tabele. © Andrzej Barczak, Janusz Kosiń Kosiński 2004 139 Moduły Nazwa_modulu Nr_prac Nazw_pracownika SRBD 315 SZYMCZYK PRBD 315 SZYMCZYK DBD 415 PAWŁOWSKI Zaliczenia DRUGA POSTAĆ NORMALNA PRZY PRZEPROWADZENIU RELACJI Z 1NF DO 2NF CHODZI O USUNIĘCIE NIEPEŁNEJ ZALEŻNOŚCI FUNKCJONALNEJ tj. ATRYBUTÓW ZALEŻNYCH OD CZĘŚCI KLUCZA Studenci Nazwa_modulu Nr_studenta Ocena Typ_oceny Nr_studenta Nazw_studenta SRBD 54678 B3 K1 54678 STAŃCZAK SRBD 54678 B1 K2 54678 STAŃCZAK SRBD 55675 B2 K1 55675 TOMCZAK SRBD 52378 B3 K1 52378 FUJARSKI SRBD 52378 B1 K2 52378 FUJARSKI PRBD 54678 B3 K1 54678 STAŃCZAK PRBD 53276 B2 K1 53276 CZERWIŃSKI DBD 57111 A1 EGZAMIN 57111 POLACZEK © Andrzej Barczak, Janusz Kosiń Kosiński 2004 140 Niech A, B, C, będą trzema rozłącznymi podzbiorami atrybutów. Atrybut C jest przechodnio (tranzytywnie) funkcjonalnie zależny od atrybutu A, jeśli C jest funkcjonalnie zależny od atrybutu B, atrybut B jest funkcjonalnie zależny od atrybutu A, atrybut A zaś nie jest funkcjonalnie zależny od B lub B nie jest funkcjonalnie zależny OD C. Jeśli A B, B C i nie prawda, że gdy B A lub C B to A wyznacza w sposób przechodni C Relacja jest w 3NF wtedy i tylko wtedy, gdy jest w 2NF i każdy jej niekluczowy atrybut jest bezpośrednio zależny (a nie przechodnio) od klucza głównego 141 ABY PRZEJŚĆ Z 2NF DO 3NF, NALEŻY USUNĄĆ TAK ZWANE ZALEŻNOŚCI PRZECHODNIE MIĘDZY DANYMI * Rozważamy każdą tabelę i dla każdej pary niekluczowych elementów danych zadajemy pytanie, czy wartość pola a zależy od wartości pola b lub odwrotnie? Jeżeli odpowiedź brzmi tak, to przenosimy powiązane elementy danych do oddzielnej tabeli * Zależności przechodnie istnieją w tabeli Moduły Nr_prac determinuje Nazw_pracownika. Atrybut Nazw_pracownika jest zatem przechodnio zależny od Nazwa_modulu; Nr_prac pretenduje, aby być kluczem głównym; tworzymy oddzielną tabelę o nazwie Wykładowcy z Nr_prac jako kluczem głównym. 142 Moduły Nazwa_modulu Wykładowcy Nr_prac Nr_prac Nazw_pracownika SRBD 315 315 SZYMCZYK PRBD 315 315 SZYMCZYK DBD 415 415 PAWŁOWSKI Zaliczenia TRZECIA POSTAĆ NORMALNA Studenci Nazwa_modulu Nr_studenta Ocena Typ_oceny Nr_studenta Nazw_studenta SRBD 54678 B3 K1 54678 STAŃCZAK SRBD 54678 B1 K2 54678 STAŃCZAK SRBD 55675 B2 K1 55675 TOMCZAK SRBD 52378 B3 K1 52378 FUJARSKI SRBD 52378 B1 K2 52378 FUJARSKI PRBD 54678 B3 K1 54678 STAŃCZAK PRBD 53276 B2 K1 53276 CZERWIŃSKI DBD 57111 A1 EGZAMIN 57111 POLACZEK 143 PRZYSIĘGA NORMALIZACJI (parafraza): * * BEZ POWTÓRZEŃ; * * POLA ZALEŻĄ OD KLUCZA; * * OD CAŁEGO KLUCZA; * * I NICZEGO INNEGO, TYLKO KLUCZA; * * TAK MI DOPOMÓŻ CODD. 144 ZALEŻNOŚCI FUNKCYJNE Element determinujący Element zależny Numer_pracownika Nazwisko_pracownika Numer_zamowienia Data_zamowienia Kod_kursu Numer_studenta 145 ZALEŻNOŚCI NIEFUNKCYJNE (wielowartościowe) Element danych B jest niefunkcyjnie zależny od elementu danych A, jeżeli dla każdej wartości elementu A istnieje ograniczony zbiór wartości elementu danych B Nazwa_modulu Numer_pracownika Numer_studenta Numer_pracownika Język_pracownika Nazwisko_pracownika 146 ZALEŻNOŚCI PRZECHODNIE Numer_pracownika Nazwa_ dzialu Lokalizacja ZALEŻNOŚCI ZŁOŻONE Nazwa_ modulu Numer_studenta Ocena Typ_zaliczenia 147 AKOMODACJA ZALEŻNOŚCI FUNKCYJNYCH Numer_ pracownika Nazwa_ dzialu Lokalizacja Nazwisko_ pracownika Reguła Boyce’a – Codda Każdy funkcyjnie determinujący element staje się kluczem głównym (kluczem kandydującym relacji) Wszystkie bezpośrednio zależne od niego elementy danych stają się niegłównymi atrybutami tabeli 148 DIAGRAM ZALEŻNOŚCI Działy Pracownicy Nazwa_dzialu Lokalizacja Numer_pracownika Nazwisko_ pracownika 149 AKOMODACJA ZALEŻNOŚCI NIEFUNKCYJNYCH Działy Nazwa_dzialu Lokalizacja Pracownicy Jezyk Nr_pracownika Nazwisko_ pracownika Jezyk_ pracownika Każdy Każdyniefunkcyjnie niefunkcyjniezależny zależny element elementstaje stajesię sięczęścią częścią klucza kluczagłównego głównegotabeli tabeli (Tworzymy (Tworzymyklucz kluczzłożony złożony zzdeterminującego determinującegoelementu elementu danych danychi izależnych zależnychelementów elementów danych danychwchodzących wchodzącychwwskład skład związku związkuniefunkcyjnego) niefunkcyjnego) 150 Aby przejść z 3NF do 4NF, szukamy tabel, które zawierają dwie lub więcej zależności wielowartościowych nr_pracownika umiejetnosci jezyk 24 OBSLUGA KOMPUTERA ANGIELSKI 24 OBSLUGA KOMPUTERA FRANCUSKI 24 DYKTOWANIE ANGIELSKI 35 OBSLUGA KOMPUTERA NIEMIECKI 35 DYKTOWANIE FRANCUSKI 46 OBSLUGA KOMPUTERA FRANCUSKI 46 OBSLUGA KOMPUTERA ANGIELSKI (umiejętności i język nie są wewnętrznie powiązane) 151 CZWARTA POSTAĆ NORMALNA Umiejętnosci Numer_pracownika Jezyk W 4NF te dwa związki nie mogą być reprezentowane w jednej tabeli. Występowanie dwóch niezależnych zależności wielowartościowych oznacza, że musimy podzielić tabelę na dwie tabele 152 nr_pracownika umiejetnosci 24 OBSLUGA KOMPUTERA 24 DYKTOWANIE 35 OBSLUGA KOMPUTERA 35 DYKTOWANIE 46 OBSLUGA KOMPUTERA nr_pracownika CZWARTA POSTAĆ NORMALNA jezyk 24 ANGIELSKI 24 FRANCUSKI 35 NIEMIECKI 35 FRANCUSKI 46 FRANCUSKI 46 ANGIELSKI 153 Relacja jest w 5NF wtedy i tylko wtedy, gdy jest w 4NF i nie istnieje jej rozkład odwracalny na zbiór mniejszych tabel dealer firma pojazd Szewczyk Ford OSOBOWY Szewczyk Lada FURGONETKA Zasada Ford FURGONETKA Zasada Lada OSOBOWY FIRMA DEALER POJAZD PIĄTA POSTAĆ NORMALNA 5NF dotyczy powiązanych między sobą zależności wielowartościowych, nazywanych też zależnościami złączenia 154 PRZYKŁAD - WYJŚCIOWY SCHEMAT RELACJI 1NF Zamówienie WADY: * Numer_zam * Data_zam * Indeks_kl * Nazwa_kl * Adres_kl Zamówienie - Wyrób * Numer_zam * Kod_wyr * Nazwa_wyr * Cena_wyr * Ilość_zam * Wielokrotnie dublowany adres i nazwa klienta * Możliwość wystąpienia niespójności danych na skutek uaktualniania adresu klienta w jednych krotkach i pozostawienie starego w innych * Nie możemy zapamiętać adresu klienta, który nie złożył żadnego zamówienia * Usuwając informacje o zamówieniu złożonym przez danego klienta możemy utracić informacje o kliencie jeżeli to był jedyny klient * Wartosc_zam 155 Przykład: Wyjściowy schemat relacji 1NF ZALEŻNOŚCI FUNKCYJNE Zamowienie * Numer_Zam * Data_Zam * Indeks_Kl * Nazwa_Kl * Adres_Kl Zamowienie - Wyrob * Numer_Zam * Kod_Wyr * Nazwa_Wyr * Cena_Wyr * Ilosc_Zam * Wartosc_Zam 156 W wyjściowym schemacie relacji istnieje niepełna zależność funkcyjna Kod_wyr Nazwa_wyr Kod_wyr Cena_wyr * atrybuty Nazwa_wyr i Cena_wyr są funkcyjnie zależne od podzbioru klucza relacji, tj. od Kod_wyr stanowiącego część klucza (Numer_zam, Kod_wyr) * przy przeprowadzeniu relacji z 1NF do 2NF należy usunąć niepełne zależności tj. atrybuty zależne od części klucza 157 WADY Dublowanie się danych, np. Indeks_Kl, Nazwa_Kl, Adres_Kl, (Istnieją zależności przechodnie) ZALEŻNOŚCI FUNKCYJNE Przykład c.d.: Relacja w 2NF Zamowienie * Numer_Zam * Data_Zam * Indeks_Kl * Nazwa_Kl * Adres_Kl Zamowienie - Wyrob Wyrob * Numer_Zam * Kod_Wyr * Kod_Wyr * Nazwa_Wyr * Ilosc_Zam * Cena_Wyr * Wartosc_Zam 158 W relacji Zamówienie zachodzą następujące przechodnie zależności funkcyjne Numer_Zam Indeks_Kl A B Indeks_Kl Nazwa_Kl B C (odwrotna zależność nie jest prawdziwa) * Nazwa_Kl jest przechodnio funkcjonalnie zależna od Numer_Zam * Przy przeprowadzeniu relacji do 3NF chodzi o usunięcie przechodnich zależności funkcyjnych (atrybutów zależnych od innych niż klucz relacji) * Jeśli A BiB C czyli C przechodnio zależy od A, należy podzielić je na dwie relacje (AB) i (BC) 159 ZALEŻNOŚCI FUNKCYJNE Przykład c.d.: Relacja w 3NF Zamowienie Klient * Numer_Zam * Indeks_Kl * Data_Zam * Nazwa_Kl * Indeks_Kl * Adres_Kl Zamowienie - Wyrob Wyrob * Numer_Zam * Kod_Wyr * Kod_Wyr * Nazwa_Wyr * Ilosc_Zam * Cena_Wyr * Wartosc_Zam 160 Funkcje sumaryczne i podzapytania 161 Funkcja jest specjalnym rodzajem polecenia w zbiorze poleceń SQL99. Funkcje to jednowymiarowe polecenia zwracające jedną wartość. Wartość funkcji może być uzależniona od parametrów wejściowych, jak w przypadku funkcji obliczającej średnią z listy wartości bazy danych. Wiele funkcji nie używa jednak parametrów żadnego typu, jak funkcja CURRENT_TIME zwracająca bieżący czas systemu. Każdy dostawca systemów baz danych oferuje własną listę funkcji wewnętrznych wykraczających poza zakres standardu SQL. Większość dostawców baz danych oferuje możliwość obsługiwania funkcji definiowanych przez użytkownika (UDF – User Definable Function). 162 Funkcje mogą być deterministyczne i niedeterministyczne. Funkcja deterministyczna zawsze zwraca ten sam wynik, jeśli podano te same wartości wejściowe. Funkcja niedeterministyczna zwraca inny wynik przy każdym wywołaniu, nawet jeśli podano te same wartości wejściowe. To jest ważne, ponieważ od tego zależy sposób użycia funkcji w perspektywach, funkcjach UDF czy procedurach składowanych. Zasady i ograniczenia są różne u poszczególnych dostawców więc należy korzystać z dokumentacji poszczególnych systemów baz danych. Na przykład Microsoft SQL Server pozwala na tworzenie indeksu dla wyrażenia kolumnowego tylko wtedy, jeśli wyrażenie nie zawiera funkcji niedeterministycznych. 163 Typy funkcji Istnieje kilka podstawowych typów i kategorii funkcji w SQL99 i implementacjach SQL u dostawców. Podstawowymi są: Funkcje agregujące Działają na zbiorze wartości, ale zwracają pojedynczą wartość podsumowującą. Funkcje skalarne Działają na pojedynczej wartości i zwracają jedną wartość na podstawie wartości wejściowej. Niektóre funkcje skalarne, np. CURRENT_TIME, nie wymagają żadnych argumentów. 164 Funkcje agregujące Funkcje agregujące zwracają pojedynczą wartość na podstawie zbioru innych wartości. Jeśli są używane wraz z innymi wyrażeniami w liście instrukcji SELECT, SELECT musi mieć klauzulę GROUP BY. Klauzula ta nie jest wymagana, jeśli funkcje agregujące są jedynymi wartościami zwracanymi przez SELECT. AVG (wyrażenie) Oblicza średnią wartość kolumny podanej w wyrażeniu COUNT (wyrażenie) Liczy wiersze podane w wyrażeniu COUNT(*) Liczy wszystkie wiersze podanej tabeli lub perspektywy MIN(wyrażenie) Znajduje minimalną wartość w kolumnie podanej w wyrażeniu MAX(wyrażenie) Znajduje maksymalną wartość w kolumnie podanej w wyrażeniu SUM(wyrażenie) Oblicza sumę wartości kolumny podanej w wyrażeniu ANY, EVERY i SOME są uważane za funkcje agregujące, są jednak najczęściej stosowane jako kryteria zakresu wyszukiwania, ponieważ w ten sposób są najczęściej stosowane - klauzule związane z SELECT ... WHERE 165 AVG i SUM Poniższe zapytanie oblicza średnią roczną sprzedaż każdego typu książek: SELECT typ, AVG(roczna_sprzedaz) AS „srednia_roczna_sprzedaz” FROM tytuly GROUP BY typ; Zaś to zapytanie zwraca sumę rocznej sprzedaży książek każdego typu: SELECT typ, SUM(roczna_sprzedaz) AS „srednia_roczna_sprzedaz” FROM tytuly GROUP BY typ; AVG i SUM są obsługiwane przez Microsoft SQL Server, MYSQL, Oracle i PostgreSQL 166 COUNT Funkcja COUNT ma trzy warianty. COUNT (*) liczy wszystkie wiersze w docelowej tabeli bez względu na to, czy zawierają wartość NULL, czy nie, COUNT(wyrażenie) zlicza w podanej kolumnie lub wyrażeniu wiersze, które nie zawierają wartości NULL. COUNT(DISTINCT wyrażenie) podaje liczbę różnych (nie NULL) wartości w kolumnie lub wyrażeniu. Poniższe wyrażenie liczy wszystkie wiersze tabeli: SELECT COUNT(*) FROM wydawcy; Zaś to zapytanie znajduje liczbę państw, w których znajdują się wydawcy: SELECT COUNT(DISTINCT kraj) „Liczba_krajow”) FROM wydawcy; 167 MIN i MAX MIN(wyrażenie) i MAX(wyrażenie) znajdują minimalną i maksymalną wartość (czasu, łańcuchową, czy liczbową) w zbiorze wierszy. Można w tych funkcjach stosować DISTINCT i ALL, ale nie wpływa to na wynik. Poniższe zapytanie znajduje najlepszą i najgorszą wartość rocznej sprzedaży dowolnego tytułu: SELECT ‘MIN’ = MIN(roczna_sprzedaz). ‘MAX’ = MAX(roczna_sprzedaz) FROM tytuly; Funkcje agregujące są często używane w klauzuli HAVING zapytań z grupy GROUP BY: SELECT FROM ‘kategoria’, AVG(cena) ‘srednia_cena’ tytuly GROUP BY typ HAVING AVG(cena) > 15 MIN i MAX są obsługiwane przez Microsoft SQL Server, MYSQL, Oracle i PostgreSQL 168 Funkcje skalarne - kategorie wbudowane Przeprowadzają operacje na wartościach lub ustawieniach w budowanych w bazę danych. Oracle używa terminu „wbudowany” do opisu wszystkich funkcji dostarczanych przez Oracle, zatem „wbudowanych” w ten DBMS – czyli jest to inne stosowanie tego terminu daty i czasu Przeprowadzają operacje na polach zawierających datę i czas i zwracają wyniki typu date, time liczbowe Przeprowadzają operacje na danych liczbowych i zwracają wartości liczbowe znakowe Przeprowadzają operacje na wartościach tekstowych (char, varchar, nchar, nvarchar, CLOB) i zwracają łańcuch lub wartość liczbową, 169 Wbudowane funkcje skalarne CURRENT_DATE Bieżąca data CURRENT_TIME Bieżący czas CURRENT_TIMESTAMP Bieżąca data i czas CURENT_USER Identyfikuje aktywnego użytkownika w serwerze bazy danych SESSION_USER Identyfikuje obecnie aktywny identyfikator autoryzacji (AuthorizationID), jeśli różni się od identyfikatora użytkownika SYSTEM_USER Identyfikuje aktywnego użytkownika w systemie operacyjnym komputera lokalnego Poniższe zapytania pobierają wartości wbudowanych funkcji (różne dla różnych dostawców): /*MySQL */ SELECT CURRENT_TIMESTAMP; -> ‘2002-12-15 23:50:26’ /*Microsoft SQL Server */ SELECT CURRENT_TIMESTAMP GO -> ‘Dec 15, 2002 23:50:26’ /*Oracle */ SELECT USER FROM; dual; -> dylan 170 Liczbowe funkcje skalarne BIT_LENGHT (wyrażenie) Zwraca liczbę całkowitą oznaczająca liczbę bitów w wyrażeniu CHAR_LENGHT (wyrażenie) Zwraca liczbę całkowitą oznaczającą liczbę znaków w wyrażeniu EXTRACT(wyrażenie daty-czasu, część_daty FROM wyrażenie) Pozwala na wyodrębnienie z wyrażenia części daty (YEAR, MONTH, DAY, HOUR, MINUTE, SECOND, TIMEZONE_HOUR lub TIMEZONE_MINUTE) OCTET_LENGHT (wyrażenie) Zwraca liczbę całkowitą reprezentującą liczbę oktetów w wyrażeniu. Jest to taka sama wartość jak BIT_LENGHT POSITION (podłańcuch IN łańcuch) Zwraca liczbę całkowitą oznaczającą pozycję początku szukanego podłańcucha w łańcuchu poszukiwanym 171 Funkcje znakowe Podstawowe funkcje znakowe oferują kilka możliwości. Jako wynik zwracają łańcuch znaków. Niektóre funkcje są dwuargumentowe, tzn. działają jednocześnie na dwóch łańcuchach znaków. SQL99 opisuje następujące funkcje znakowe: CONCATENATE Łączy dwa (lub więcej) wyrażenia literalne, wartości kolumn lub zmiennych razem w jeden łańcuch znaków CONVERT Konwertuje łańcuch na inną reprezentację w tym samym zestawie znaków LOWER Konwertuje łańcuch na złożony z samych małych liter SUBSTRING Wybiera część łańcucha TRANSLATE Konwertuje łańcuch z jednego zestawu znaków na inny TRIM Usuwa znaki z początku, kończ lub z obu stron łańcucha znaków UPPER Konwertuje łańcuch na złożony z samych wielkich liter (wyrażenie | | wyrażenie) 172 Klauzula GROUP BY (i klauzula HAVING) jest potrzebna tylko w zapytaniach używających funkcji agregujących. Zapytania zawierające funkcje agregujące mogą dostarczać wielu podsumowujących informacji. Zapytania, znane jako agregacje skalarne zwracają tylko jedna wartość i nie wymagają stosowania klauzuli GROUP BY. Przykładowo: -- zapytanie SELECT AVG (cena) FROM tytuly -- wynik 14.77 Zapytania, zwracające zarówno zwykłe kolumny, jak i funkcje agregujące są nazywane agregacjami wektorowymi. Agregacje takie używają klauzuli GROUP BY i zwracają jeden wiersz lub więcej. 173 Niektóre zasady stosowania GROUP BY GROUP BY należy umieścić w odpowiednim miejscu: po klauzuli WHERE i przed klauzulą ORDER BY W klauzuli GROUP BY należy wymienić wszystkie kolumny nie zawierające agregacji W klauzuli GROUP BY nie należy stosować aliasów nazw kolumn. Aliasy nazw tabel są dopuszczalne 174 Np. chcemy uzyskać informację, ile osób pracuje w firmie w danym charakterze -- zapytanie SELECT COUNT FROM JOIN GROUP BY p.stanowisko AS „Stanowisko”, (p.id_stan) AS „Liczba_pracowników” pracownicy p stanowisko s ON p.id_stan = s.id_stan p.stanowisko -- wyniki Stanowisko ----------------------------Acquisition Manager Bussiness Operations Manager Chief Executive Officer Chief Financial Officer Designer Managing Editor Publisher Sales Representative Liczba pracowników ----------------------------4 1 1 1 3 5 7 3 175 Klauzula HAVING pozwala na przeprowadzenie wyszukiwania w zbiorze wyników klauzuli GROUP BY. Nie wpływa ona na wiersze używane do obliczania agregacji, a tylko na wiersze zwrócone przez zapytanie. HAVING działa podobnie jak klauzula WHERE. Stosowane są również te same warunki wyszukiwania. HAVING nie powinna być używana do eliminowania wierszy, które są eliminowane przez klauzulę WHERE. Warunki WHERE powinny zawsze dotyczyć wartości agregacji. 176 Np. chcemy uzyskać informację o stanowiskach na których pracuje więcej niż 3 osoby -- zapytanie SELECT p.stanowisko AS „Stanowisko”, COUNT (p.id_stan) AS „Liczba_pracowników” FROM pracownicy p JOIN stanowisko s ON p.id_stan = s.id_stan GROUP BY p.stanowisko HAVING COUNT (p.id_stan) > 3 -- wyniki Stanowisko ----------------------------Acquisition Manager Managing Editor Publisher Liczba pracowników ----------------------------4 5 7 177 Instrukcja SELECT pobiera wiersze, kolumny i wartości z jednej tabeli lub kilku tabel bazy danych. Dostawca Polecenie SQL Server obsługiwane ze zmianami (obsługa złączeń ANSI) MySQL obsługiwane ze zmianami (częściowa obsługa złączeń ANSI) ORACLE obsługiwane ze zmianami (brak obsługi złączeń ANSI) PostgreSQL obsługiwane ze zmianami (częściowa obsługa złączeń ANSI) 178 Pełna składnia instrukcji SELECT jest złożona, ale może być podzielona na następujące główne klauzule: SELECT [ ALL | DISTINCT ] lista_select FROM nazwa_tabeli [ , ..., nazwa_tabeliN ] [ JOIN warunek_złączenia ] [ WHERE warunek_wyszukiwania ] [ GROUP BY wyrażenie_grupujące ] [ HAVING warunek_wyszukiwania ] [ ORDER BY wyrażenie_porządkujące [ ASC | DESC ] ] 179 Nie każde zapytanie wymaga wszystkich klauzul. Wymagane jest co najmniej podanie listy instrukcji SELECT i klauzuli FROM. Lista instrukcji SELECT zawiera spis informacji, które użytkownik chce otrzymać z serwera. Na tej liście mogą pojawiać się elementy różnych typów. Mogą to być łańcuchy znaków, funkcje agregujące i obliczenia matematyczne. W Microsoft SQL Server lista SELECT może zawierać podzapytanie. Domyślna opcja ALL oznacza, że zwrócone zostaną wszystkie rekordy, włącznie z wartościami domyślnymi. Słowo kluczowe DISTINCT powoduje odfiltrowanie wszystkich powtarzających się rekordów. Zbiór wynikowy będzie zawierał po jednej instancji identycznych rekordów. 180 Istniej kilka reguł, dotyczących tego, co może pojawić się na liście wyrażenia SELECT: 9 Powinny być wymienione, oddzielone przecinkami wszystkie żądane kolumny 9 Znak gwiazdki ( * ) służy za skrót pozwalający na uzyskanie wszystkich kolumn ze wszystkich tabel wymienionych w klauzuli FROM, tak jak zostały podane w instrukcji CREATE TABLE 181 Można podać aliasy nazw kolumn, które zastąpią nagłówki kolumn w zbiorze wyników. Służą do tego kolumna AS alias i kolumna alias. Jest to szczególnie użyteczne, gdy nagłówek kolumny jest zbyt tajemniczy lub zbyt długi, aby być zrozumiałym. Przykładowo: format aliasu SELECT au_nazw AS „Nazwisko” FROM autorzy alternatywny format aliasu SELECT au_nazw „Nazwisko” FROM autorzy 182 9 w liście instrukcji SELECT mogą wystąpić zmienne lokalne i globalne, jeśli są obsługiwane 9 w każdej instrukcji SQL czy Transact-SQL mogą wystąpić komentarze oznaczone przez podwójny myślnik ( -- ) lub ukośnik i gwiazdkę ( /* ... */ ). Podwójny myślnik powoduje zignorowanie tekstu następującego po nim aż do końca linii. Ukośnik powoduje zignorowanie każdego tekstu pomiędzy znakami: ukośnik-gwiazdka i gwiazdka-ukośnik 183 9 nazwy kolumn w zapytaniu dotyczącym wielu tabel powinny być poprzedzone przez nazwę tabeli. Jest to uznawane za dobrą praktykę, bowiem nazwa kolumny może pasować do obu tabel. Przykładowo, zarówno tabela pracownicy jak i stanowiska zawiera kolumnę id_stan. SELECT pracownicy.id_stanowiska, pracownicy.imie, pracownicy.nazwisko, stanowiska.nazwa FROM pracownicy, stanowiska WHERE pracownicy.id_stanowiska = stanowiska.id_stan ORDER BY pracownicy.imie pracownicy.nazwisko 184 9 jeśli dane są pobierane spoza kontekstu bieżącego użytkownika, nazwy kolumn powinny być poprzedzone przez nazwę schematu lub użytkownika. Jeśli kolumna należy do innego użytkownika, jego nazwa musi być podana w odwołaniu do tej kolumny. Na przykład przyjmijmy, że poniższe zapytanie jest wykonywane w bazie danych PUBS, ale pobiera dane również z bazy danych SPRZEDAŻ: SELECT pracownicy.id_prac admin_sprzedazy.suma_sprzedazy.kwota_razem -- musi być podana nazwa schematu, tabeli i kolumny FROM pracownicy admin_sprzedazy.suma_sprzedazy WHERE pracownicy.id_prac = admin_sprzedazy.suma_sprzedazy.id_prac ORDER BY pracownicy.id_prac 185 9 9 w liście instrukcji SELECT można stosować wyrażenia literalne jako elementy listy mogą być również podane obliczenia matematyczne. W Microsoft SQL Server nie jest potrzebna klauzula FROM. W Oracle obliczenia powinny być wykonywane na systemowej tabeli DUAL – tabela ta pozwala poleceniu SELECT na zwrócenie wartości, gdy nie istnieje żadna tabela. Przykładowo: -- zapytanie (Microsoft SQL Server) SELECT 2 + 2 -- zapytanie (Oracle) SELECT 2 + 2 FROM dual -- wynik 4 186 Klauzula FROM służy generalnie do dwóch celów: do podania listy tabel i perspektyw (oddzielonych przecinkami), z których pobierane są dane i do nadawania aliasów długim nazwom tabel, co upraszcza tworzenie długich zapytań. Alias może być podany w klauzuli FROM na dwa sposoby: • przez wpisanie nazwy tabel, spacji i nazwy aliasu lub • przez podanie nazwy tabeli, AS i aliasu. 187 Przykładowe zapytanie pobierające dane z kilu tabel może zawierać klauzule FROM i WHERE zastosowane w następujący sposób: SELECT p.id_prac, p.imie, p.nazwisko s.nazwa FROM pracownicy p, stanowiska s WHERE p.id_stan = s.id_stan ORDER BY p.imie p.nazwisko 188 Operator LIKE pozwala na podanie wzorca dopasowania łańcucha znaków w instrukcjach SELECT, INSERT, UPDATE i DELETE. Wzorzec może zawierać symbole wieloznaczne. Dostawca --------------SQL Server MySQL Oracle PostgreSQL Polecenie -----------------obsługiwane ze obsługiwane ze obsługiwane ze obsługiwane ze zmianami zmianami zmianami zmianami Składnia SQL99 WHERE wyrażenie [ NOT ] LIKE wzorzec 189 Użyteczność LIKE opiera się na obsługiwanych symbolach wieloznacznych. LIKE zwraca wartość logiczną TRUE, jeśli znaleziono jedną (lub więcej) pasującą wartość. Warto pamiętać, że domyślne rozróżnianie wielkości znaków w DBMS ma duży wpływ na zachowanie LIKE. 190 Operator wieloznaczny % Przykład SELECT * FROM autorzy WHERE miasto LIKE’%ville%’ Zwraca wszystkie rekordy dotyczące miast mających w nazwie „ville” (obsługiwany przez wszystkich dostawców) [] SELECT * FROM autorzy WHERE au_nazwisko LIKE ‘[CK]ars[eo]n’ Zwraca autorów o nazwiskach Carson, Carsen, Karson i Karsen [^] SELECT * FROM autorzy WHERE au_nazwisko LIKE ‘[A-Z^L]ars[eo]n’ Zwraca autorów, których nazwiska kończą się na –arson lub –arsen, z wyłączeniem Larsen i Larson _ (podkreślenie) SELECT * FROM autorzy WHERE au_imie NOT LIKE ‘_heryl’ Zwraca autorów, którzy nie mają na imię Sheryl czy Cheryl. Opis Obsługiwany przez wszystkich dostawców. Dopasowuje dowolny łańcuch podobny do * w operacjach DOS. Obsługiwany przez Microsoft SQL Server. Dopasowuje wszystkie wartości z podanego zbioru, takiego jak [abc] lub zakresu takiego jak [k-n]. Obsługiwany przez Microsoft SQL Server. Dopasowuje dowolny znak nie należący do podanego zbioru czy zakresu. Obsługiwany przez wszystkich dostawców. Dopasowuje dowolny pojedynczy znak 191 Perspektywa [instrukcja CREATE VIEW] działa jak zwykła tabela, ale jest zdefiniowana jak zapytanie. Składniki perspektywy może definiować prawie każde prawidłowe polecenie SELECT, zabronione jest zazwyczaj stosowanie klauzuli ORDER BY. Gdy w instrukcji występuje odwołanie do perspektywy, zbiór wyników zapytania staje się zawartością perspektywy na czas działania polecenia. W niektórych przypadkach perspektywy mogą być modyfikowane, co powoduje przeniesienie tych zmian do do danych w tabeli bazowej. 192 Perspektywa jest tabelą wirtualną. Nie istnieje w rzeczywistości w tym sensie, że w perspektywie nie przechowuje się żadnych danych. Perspektywa jest po prostu ”oknem” na bazę danych. Są trzy główne, zależne od siebie, zastosowania perspektyw w systemie bazy danych: do upraszczania, do wykonywania pewnych funkcji lub do realizacji strategii ochrony: 1. Uproszczenie. Można utworzyć kilka perspektyw upraszczając dane, które ogląda każdy z użytkowników. 2. Funkcjonalność. Istnieje wewnętrzna zasada w modelu relacyjnym: przechowuj najmniej jak tylko jest to możliwe. Konsekwencją tego jest to, że dane, które mogą być wydobyte z innych danych w bazie, nie są zazwyczaj przechowywane. 3. Ochrona. Stosuje się deklarowanie perspektyw dla określonych użytkowników. 193 Perspektywy mogą być budowane także na podstawie innych perspektyw. Konstrukcje takie nie są jednak zalecane i uważa się stosowanie ich za złą praktykę. 194 Przykłady: Najprostsza perspektywa opiera się na zawartości jednej tabeli: CREATE VIEW pracownicy AS SELECT * FROM tabela_pracownicy; W poniższym przykładzie stworzono perspektywę o nazwie autorzy_z_kalifornii, która pozwala na modyfikację tylko danych autorów, którzy mieszkają w Kalifornii: CREATE VIEW autorzy_z_kalifornii AS SELECT au_imie, au_nazwisko, miasto, stan FROM authors; WHERE stan = ‘CA’ WITH CHECK OPTION GO 195 Wstęp do sterowania transakcjami 196 Zdarzenia, które powodują zmianę stanu, są w terminologii baz danych nazywane transakcjami. Transakcja zmienia bazę danych z jednego stanu w drugi. Nowy stan jest wprowadzany przez stwierdzenie faktów, które stają się prawdziwe i/lub przez zaprzeczenie faktów które przestają być prawdziwe. Przykładem transakcji może być, np. Zapisz studenta na moduł 197 W systemie baz danych z wieloma użytkownikami transakcjami nazywamy procedury, które wprowadzają zmiany do bazy danych lub które wyszukują dane w bazie danych. Transakcja może być zdefiniowana jako logiczna jednostka pracy. Transakcja zazwyczaj odpowiada pewnej spójnej operacji wykonywanej na bazie danych przez organizację. 198 Każda transakcja powinna mieć właściwości: 9 9 9 9 Niepodzielności Spójności Izolacji Trwałości 199 Niepodzielność Skoro transakcja składa się ze zbioru akcji, to menedżer transakcji powinien zapewnić, że albo transakcja zostanie wykonana w całości albo w ogóle nic się nie wydarzy. Spójność Wszystkie transakcje muszą zachowywać spójność i integralność bazy danych. Operacje wykonywane np. przez transakcję modyfikującą, nie powinny pozostawiać bazy danych w stanie niespójnym lub nie poprawionym. 200 Izolacja Jeżeli transakcja modyfikuje dzielone dane, to te dane mogą być tymczasowo niespójne. Takie dane muszą być niedostępne dla innych transakcji, dopóty, dopóki dana transakcja nie przestanie ich używać . Trwałość Gdy transakcja kończy się, wówczas zmiany dokonane przez nią powinny zostać w pełni utrwalone. To znaczy, nawet w wypadku awarii sprzętu lub oprogramowania powinny zostać one zachowane. 201 Konwencjonalną metodą zapobiegania niepoprawnym zjawiskom, np. utraceniu modyfikacji, jest stosowanie blokad systemowych. Gdy użytkownik zakłada blokadę na rekord lub plik, przekazuje tym samym innym użytkownikom sygnał, że coś robi z tym rekordem lub plikiem i prosi o poczekanie aż ukończy swoje zadanie. 202 Blokady do odczytu Blokada do odczytu daje dostęp tylko do odczytu danych i ochrania zablokowane dane przed ich modyfikacją przez inną transakcję. Dowolna liczba transakcji może mieć założoną blokadę do odczytu na elemencie danych. Ten typ blokady stosujemy, gdy chcemy zastosować zapytanie na tabeli, bez potrzeby dokonywania w niej zmian. Ponadto jest istotne, aby inni użytkownicy nie zmieniali tabeli w czasie, gdy ktoś ją ogląda. 203 Blokady do zapisu Blokada do zapisu umożliwia dostęp do elementów danych zarówno w celu ich odczytu, jak i zapisu. Jednocześnie uniemożliwia innym transakcjom jakikolwiek odczyt i zapis dla tego elementu danych. Z tego powodu nazywana jest również blokadą wyłączną. 204 Zakleszczenie, zwane też wzajemną blokadą lub śmiertelnym uściskiem, przedstawimy na podstawie przykładu. Rozważmy transakcje, Trans1 i Trans2: 1. W chwili t1 Trans1 zakłada blokadę do zapisu elementu danych A. 2. W chwili t1 Trans2 zakłada blokadę do zapisu elementu danych B. 3. W chwili t2 Trans1 żąda blokady do zapisu na elemencie danych B. Musi czekać, ponieważ Trans2 zablokowała B. 4. W chwili t2 Trans2 żąda blokady do zapisu na elemencie danych A. Musi czekać, ponieważ Trans1 zablokowała A. 205 Istnieje kilka strategii zapobiegania zakleszczeniom. Jedna z nich polega na wymaganiu od wszystkich transakcji, aby zakładały swoje blokady przed rozpoczęciem działania. Przyjęcie takiej strategii ma negatywny wpływ na wydajność systemu, gdyż duże transakcje mogą ciągle czekać na rozpoczęcie działania. Bardziej efektywne strategie radzenia sobie z zakleszczaniem w systemach baz danych polegają na jego wykryciu po tym, jak już wystąpiło, a następnie jego zlikwidowaniu 206 W większości produktów, których podstawę stanowi SQL, transakcja jest po prostu ciągiem instrukcji SQL, które są zebrane razem jako jedna jednostka przetwarzania danych na bazie danych. Relacyjne DBMS utrzymują spójność przez zapewnienie, że albo wszystkie instrukcje SQL w transakcji kończą się pomyślnie, albo żadna. W SQL do kończenia transakcji używamy instrukcji COMMIT i ROLLBACK. COMMIT czyni trwałymi zmiany dokonane w bazie danych przez pomyślną transakcję. ROLLBACK wycofuje wszystkie zmiany dokonane w bazie danych przez niepomyślną transakcję. 207 Oprócz finalizowania jednej lub grupy operacji manipulacji danymi, COMMIT ma wpływ na inne aspekty transakcji. Po pierwsze, zamyka wszystkie powiązane z nią otwarte kursory. Po drugie usuwa dane z wszystkich tymczasowych tabel utworzonych z klauzulą ON COMMIT DELETE ROWS. Po trzecie zwalania wszystkie blokady stworzone przez transakcję. Po czwarte, sprawdzane są wszystkie odroczone więzy – jeśli któreś z nich są naruszone, cała transakcja jest cofana. Składnia: COMMIT [WORK] 208 Brudny odczyt Występuje, jeśli transakcja czyta rekordy zmieniane przez inną transakcję przed zakończeniem tej transakcji. Powoduje to możliwość modyfikacji danych rekordu, który może nie istnieć w bazie danych. 209 Odczyt niepowtarzalny Występuje, jeśli transakcja czyta rekord, który jest modyfikowany przez inną transakcję. Zatem gdy pierwsza transakcja próbuje ponownie odczytać ten rekord, nie może go znaleźć. 210 Rekordy-widma Występują, gdy transakcja czyta grupę rekordów, ale modyfikacja danych dodaje lub zmienia dane, co powoduje, że więcej rekordów spełnia warunki pierwszej transakcji. 211 Ustawienie poziomów izolacji wpływa na te anomalie W SQL99 domyślnym poziomem izolacji jest SERIALIZABLE. Transakcje READ WRITE nie mogą być ustawione jako READ UNCOMMITED 212 Wpływ poziomów izolacji na anomalie Brudny odczyt Odczyt niepowtarzalny Rekordywidma READ COMMITED Nie Tak Tak READ UNCOMMITED Tak Tak Tak REPETEABLE READ Nie Nie Tak SERIALIZABLE Nie Nie Nie 213 Polecenie BEGIN TRANSACTION działa podobnie jak START TRANSACTION. Polecenie to obsługuje zarówno Microsoft SQL Server jak i PostgreSQL. Należy upewnić się, że każde BEGIN ma swoje własne COMMIT i ROLLBACK. W innym przypadku DBMS nie zakończy instrukcji do spotkania następnego COMMIT lub ROLLBACK. Może to prowadzić do powstania wielkich transakcji o nieprzewidywalnym wpływie na dane 214 Instrukcja ROLLBACK cofa wykonanie transakcji do jej początku lub do zdefiniowanego punktu zapisu (SAVEPOINT). Zamyka otwarte kursory i zwalnia blokady tak samo jak COMMIT. Dostawca Polecenie ---------------------------------------------------------SQL Server obsługiwane ze zmianami MySQL nie obsługiwane Oracle obsługiwane PostgreSQL obsługiwane 215 Polecenie SAVEPOINT tworzy punkt zapisu w bieżącej transakcji. Dzięki temu poleceniu można podzielić transakcję na logiczne bloki. Dla jednej transakcji można podać wiele punktów zapisu. Główną korzyścią wynikająca z instrukcji SAVEPOINT jest możliwość częściowego cofnięcia transakcji do podanego, unikatowo nazwanego punktu za pomocą polecenia ROLLBACK. 216 Głównymi krokami przy wykonywaniu transakcji są: 1. Uruchom transakcję 2. Zapisz transakcję do dziennika. Zapisz w dzienniku informacje początkowe o transakcji 3. Sprowadź rekordy z bazy danych 4. Zapisz do dziennika obraz przed transakcją, to jest wartości przed przetworzeniem przez transakcję 5. Oblicz nowe wartości 6. Zapisz do dziennika obraz po transakcji, to jest wartości po przetworzeniu przez transakcję 7. Zapisz w dzienniku zatwierdzone dane 8. Zapisz nowe rekordy do bazy danych 217 Słownik danych jest sposobem zapisywania metadanych jakiejś organizacji, to znaczy danych na temat danych. To co tworzy metadane jest określane na etapie tworzenia bazy danych. 218 Katalog systemowy lub słownik danych jest sercem systemu zarządzania bazą danych. Podstawowe informacje, które są przechowywane w słowniku danych, to: 1. Opis relacji w bazie danych, wliczając w to nazwy relacji, nazwy kolumn, typy danych kolumn, charakterystyki null kolumn 2. Deklaracje kluczy głównych i obcych, wliczając w to więzy propagacji 3. Opis perspektyw 4. Deklaracje grup użytkowników i uprawnień 5. Informacje na temat indeksów, rozmiarów plików, struktur plików i klastrów 219 Możemy wydzielić trzy poziomy słownika danych: 1. Koncepcyjne słowniki danych zawierają metadane na bardzo wysokim poziomie abstrakcji 2. Logiczne słowniki danych są używane do zapisywania wymagań dotyczących danych niezależnie od sposobu, w jaki te wymagania mają być spełnione. Logiczne metadane są na trochę niższym poziomie abstrakcji niż koncepcyjne metadane. 3. Fizyczne słowniki danych są używane do zapisywania struktur danych wyrażonych za pomocą rekordów. To znaczy zapisują metadane powiązane z aktualny i strukturami bazy danych lub plików. Zbiór tabel systemowych RBDMS jest fizycznym słownikiem danych. 220 Hierarchiczny model danych 221 Hierarchiczny model danych (HMBD) używa dwóch struktur danych (typy rekordów i związków nadrzędny – podrzędny) * Typ rekordu jest nazwaną strukturą danych, złożoną ze zbioru nazwanych pól * Każde pole używane jest do przechowywania prostego atrybutu, któremu przyporządkowany jest typ danych 222 * Powiązanie nadrzędny – podrzędny jest związkiem (relacją) jeden do wielu między dwoma typami rekordów * Relacje w HMBD są reprezentowane w kategoriach Ojciec/Syn * Operowanie danymi w HMBD jest wykonywane przez wbudowanie funkcji dostępu do BD w wybranym języku programowania, w tzw. Języku Gospodarza 223 Dane w HMBD mają strukturę odwróconego drzewa. Jedna z tabel pełni rolę „korzenia”, a pozostałe mają postać „gałęzi” biorących swój początek w korzeniu. POŚREDNICY MUZYCY KLIENCI TERMINARZE UMOWY ROZLICZENIA DIAGRAM MODELU HIERARCHICZNEGO 224 W HMBD tabela „OJCIEC” może być powiązana z wieloma tabelami „SYN”, lecz pojedynczy „SYN” może mieć tylko jednego „OJCA” * Tabele w HMBD mogą być powiązane jawnie, przez wskaźniki, lub przez fizyczną organizację rekordów wewnątrz tabel * Dostęp do danych w HMBD, użytkownik rozpoczyna od korzenia (przedziera się przez całe drzewo, aż do interesującego go miejsca) Zalety HMBD: * * Względnie szybki dostęp do danych (poszczególne tabele są ze sobą bezpośrednio powiązane) * * Tabele mają automatycznie wbudowaną integralność odwołań (rekord z tabeli „SYN” musi być powiązany z istniejącym rekordem w tabeli „OJCIEC”) 225 Wady HMBD: * * Nie możemy dopisać w tabeli „syn” rekordu niepowiązanego z żadnym rekordem tabeli „ojciec” (nie można dopisać nowego muzyka dopóki nie przypiszemy mu pośrednika - sztuczne dane) * * Model nie jest zdolny do obsługi złożonych relacji typu wiele - do wielu ( jeden muzyk gra dla wielu klientów, a jeden klient może zatrudniać wielu muzyków/ * * Nadmiarowość danych (tabela terminarz zawiera dane o klientach - te same dane zawiera także tabela klienci. Tabela terminarz zawiera dane o muzykach - te same dane znajdują się w tabeli muzycy) * * Nadmiarowość danych może burzyć integralność BD (problem rozwiązuje się często przez tworzenie osobnych HBD - BD dla muzyków i pośredników) 226 Wylistowanie muzyków, z którymi zawarł umowę dany klient i terminarza występu danego muzyka Pośrednicy Muzycy BAZA DANYCH MUZYKÓW Lo g oj iczn ci a ec re - s lac yn ja Klienci Umowy Rozliczenia BAZA DANYCH POŚREDNIKÓW 227 Hierarchiczne modele danych są wciąż w praktycznym użyciu, np. przy budowie aplikacji WWW z zastosowaniem XML (Extensible Markup Language) - sztywna struktura hierarchicznych baz pomaga w zarządzaniu rozprzestrzenianiem dokumentów XML, w tak zwanych repozytoriach XML (systemach przechowywania i wyszukiwania danych XML). Z powodu wzrastającego znaczenia usług katalogowych X.500/LDAP – które są hierarchiczne - wzrasta ponownie zainteresowanie hierarchiczną organizacją danych. 228 Plik XML <klient> <nazwisko>Bogdan Kowal</nazwisko> <sprzedaz> <data>2006/04/15</data> <produkt> <nazwa>srubokret</nazwa> <cena>10 PLN</cena> <producent>ACME z.o.o.</producent> </produkt> </sprzedaz> <sprzedaz> <data>2006/04/15</data> <produkt> <nazwa>mlotek</nazwa> <cena>5 PLN</cena> <producent>ACME z.o.o.</producent> </produkt> </sprzedaz> </klient> Relacyjna baza danych Ta baza jest relacyjna ale plik XML zawiera dane hierarchiczne Klient Sprzedaż Produkt Producent Hierarchiczna baza danych Ta baza odpowiada hierarchicznej Klient strukturze Sprzedaż plików XML Produkt - może Producent z łatwością importować dane XML 229 Polska Kraj (c) ACE Sp. z o. o. Produkcja Organizacja (o) Administracja Wydział (ou) Adam W. Jerzy W. Edward Z. Jan K. Roman S. Anna Z. Zatrudnieni (cn) Wskazuje pracujących na I piętrze Jan K. jest jednoznacznie identyfikowany jako: c = Polska, o = ACE Sp. z o.o., ou = Administracja, cn = Jan K. Przykłady danych zestawianych w katalogach LDAP: * książka telefoniczna zatrudnionych * schemat organizacyjny * usługi IT (np. adresy IP serwerów) * adresy e-mail * dane binarne takie jak rysunki 230 Sieciowy model danych 231 SIECIOWY MODEL BAZY DANYCH (SMBD) - następca HMBD powstał w celu rozwiązania problemów mających miejsce w HMBD Dane w SMBD, podobnie jak w HMBD, mają strukturę „odwróconego drzewa”, z tą różnicą, że kilka drzew może dzielić ze sobą gałęzie, a każde drzewo stanowi część ogólnej struktury BD SMBD – podobnie jak HMBD – ma dwie struktury danych * * Typy rekordów (pola mogą być używane do przechowywania wielu wartości lub do reprezentowania złożonych wartości, które się powtarzają) * * Typy kolekcji (set structures) - niejawna konstrukcja łącząca dwie tabele przez przypisanie jednej z nich roli właściciela, a drugiej roli członka (stanowiło to postęp w porównaniu z relacjami ojciec – syn, ponieważ umożliwiało wprowadzenie relacji jeden – do – wielu) 232 Pośrednicy tabela - członek kolekcja kieruje reprezentuje Klienci uiszcza Rozliczenia tabela - właściciel Muzycy zawiera wypełnia Umowy gra Style muzyczne Diagram modelu sieciowego 233 Schemat sieciowej bazy danych - przykład SCHEMA : Akademia RECORD : Kursy FIELDS( Kod_Kursu : CHARACTER(6), Nazwa_Kursu : CHARACTER(20), Rok_Kontroli : DATE, ACCESS : HASH USING Kod_Kursu DUPLICATES ARE NOT ALLOWED FOR Kod_Kursu RECORD : Modul FIELDS( Nazwa_Modulu : CHARACTER(20), Nr_Prac : INTEGER(5), Poziom : INTEGER(1), ACCESS : VIA SET DUPLICATES ARE NOT ALLOWED FOR Nazwa_Modulu 234 RECORD : STUDENCI FIELDS( Nr_Studenta : INTEGER(5), Nazwisko_Studenta : CHARACTER(20), Adres : CHARACTER(30), ACCESS : VIA SET DUPLICATES ARE NOT ALLOWED FOR Nr_Studenta SET : Prowadzi OWNER : Kurs MEMBER : Modul ORDER BY Nazwa_Modulu ASCENDING SET : Ma OWNER : Modul MEMBER : Student ORDER BY Nr_Studenta ASCENDING 235 OPEROWANIE DANYMI – Ciąg operacji na BD jest wkładany do programu w języku gospodarza (język programowania gospodarza i SBD to dwa oddzielne systemy programowania. Są one połączone przez wspólny interfejs. Polecenia tego sieciowego DML w każdej chwili dotyczą zawsze jednego – bieżącego rekordu) Operacje na BD dzielimy na trzy grupy: * * NAWIGACJI (służą do ustawiania wskaźników bieżących rekordów na określone wystąpienia rekordów i kolekcji); * * SPRAWDZANIA ZAWARTOŚCI BIEŻĄCYCH REKORDÓW * * MODYFIKOWANIA ZAWARTOŚCI WYSTĄPIEŃ REKORDÓW I KOLEKCJI 236 * Integralność danych – dotyczy członkostwa w kolekcji (wymagane lub opcjonalne) i trybu wstawiania * * Wymagane (każde wystąpienie rekordu członka będzie należało do pewnego wystąpienia kolekcji) * * Tryb wstawiania (ręczny - programy użytkowe muszą wstawiać rekordy członków do określonego wcześniej wystąpienia kolekcji i automatyczny tzn. gdy tworzymy rekord członka, jest on automatycznie wstawiany do bieżącego wystąpienia kolekcji) * Więzy integralności definiujemy za pomocą dodatkowej klauzuli w definicji typu kolekcji Przykład SET : Ma OWNER : Modul MEMBER : Student ORDER BY Nr_Studenta ASCENDING INSERTION IS MANDATORY, AUTOMATIC 237 Wady SMBD * * użytkownik musi mieć dobre wyobrażenie o strukturze BD (należy pamiętać przez które kolekcje należy przejść aby uzyskać potrzebną informację) * * niemożność zmiany struktury BD bez ponownego tworzenia obsługujących ją programów (danej kolekcji nie można zmienić bez modyfikowania aplikacji bazodanowej. Jeśli któraś kolekcja ulegnie zmianie, wszystkie odwołania do tej kolekcji zawarte w aplikacji obsługującej BD muszą również zostać zmienione) Zalety SMBD * * poszukiwanie danych można rozpocząć od dowolnej tabeli * * względnie duża szybkość odczytu danych * * możliwość tworzenia bardziej złożonych zapytań niż HMBD. 238 Struktura danych HMBD drzewo Operowanie danymi nawigacyjne – w automatyczne wspomaganie jednej chwili jeden dla pewnych postaci rekord integralności referencyjnej nawigacyjne – w SMBD sieć jednej chwili jeden rekord nieproceduralne – RMBD tabela Integralność danych w jednej chwili jeden plik wbudowane wspomaganie dla pewnych postaci integralności referencyjnej wspomaganie różne, w zależności od produktu Klasyczne BD sprzyjają stosowaniu przetwarzania nawigacyjnego SZBD oparte na takich modelach danych dostarczają użytkownikom proceduralnego DML RBD działają na całych tabelach i sprzyjają wytwarzaniu nieproceduralnych interfejsów 239 Obiektowy model danych 240 9 9 Pojęcie obiektowości ma wiele różnych znaczeń Termin ten po raz pierwszy zastosowano do grupy języków programowania (simula) 9 Obiektowość w dziedzinie baz danych zastosowano dopiero niedawno 9 W obiektowych bazach danych (OBD) obiekty istnieją trwale pozostają zapisane w pamięci pomocniczej przed i po wykonaniu programów 241 9 Klasyczne modele danych reprezentują schematy za pomocą struktur rekordów i powiązań między nimi 9 Semantyczne modele danych (SeMD) Dostarczają bogatszy zbiór narzędzi do budowy schematów i umożliwiają twórcom BD określenie w schemacie bazy danych znaczenia lub semantyki dotyczących dziedziny aplikacji 242 Najpopularniejszy kierunek wsród SeMD przyjmuje za podstawę diagramy związków encji (CHEN 1976) Nie ma zgody co do różnicy między SeMD a OMD: ¾ SeMD są zazwyczaj uważane za mechanizmy do tworzenia strukturalnych abstrakcji ¾ OMD skupiają się bardziej na dostarczaniu abstrakcji zachowania; ¾ SeMD są skoncentrowane na stronie reprezentacji danych, a OMD na operowaniu danymi. 243 Składniki obiektowego modelu danych w 1991r powstaje OBJECT DATABASE MANAGEMENT GROUP (ODMG) w celu stworzenia standardów obiektowego zarządzania danymi, które wspomagałyby przenośność aplikacji między systemami 244 Obiektowa baza danych składa się z obiektów i klas obiektów, powiązanych pewną liczbą mechanizmów abstrakcji: * * Obiekt jest pakietem danych i procedur * * Dane są trzymane w atrybutach obiektu * * Procedury są definiowane za pomocą metod obiektu * * Metody są uaktywniane przez komunikaty przekazywane między obiektami OMD dostarcza środków do realizacji tożsamości obiektów (rozróżnienie dwóch obiektów o takich samych cechach) 245 Model relacyjny vs. obiektowy Model Obiektowy Model Relacyjny Relacja Podobne Klasa Krotka Podobne Obiekt instancji Kolumna Podobne Atrybut Różne Metoda Procedura składowana 246 RMD jest zorientowany na wartości (explicite nie ma możliwości przyporządkowania jednoznacznego identyfikatora każdemu obiektowi w BD) * * dwie identyczne krotki w RMD wskazują na ten sam obiekt * * dwa identyczne rekordy w OBD mogą odwoływać się do dwóch różnych obiektów dzięki wprowadzeniu jednoznacznego identyfikatora generowanego przez system 247 Wszystkie obiekty muszą mieć właściwość hermetyzacji - Procedura umieszczania danych i procesu w jednym opakowaniu w ramach zdefiniowanego interfejsu i udostępniania go z zewnątrz w sposób kontrolowany przez ten interfejs. Hermetyzację przyjmuje się niejawnie w definicji obiektu 248 Klasy obiektów - zgrupowania podobnych obiektów (używamy je do określenia wspólnych dla grupy obiektów atrybutów, metod i związków) * * obiekty są więc instancjami pewnej klasy mają te same atrybuty i metody * * Klasy obiektów definiują schemat BD – główny temat dziedziny projektowania baz danych * * Obiekty definiują zawartość BD - główny temat dziedziny implementacji BD 249 OMD dostarcza dwóch mechanizmów, które umożliwiają konstruowanie hierarchii lub struktur klas obiektów - mechanizm uogólniania i agregacji: • mechanizm uogólniania umożliwia deklarowanie pewnych klas obiektów jako podklas innych klas obiektów • agregacja jest procesem, dzięki któremu obiekt wyższego poziomu jest używany do grupowania pewnej liczby obiektów niższych poziomów. 250 Proces dziedziczenia jest związany z pojęciem hierarchii uogólnienia Istnieją dwa główne typy dziedziczenia – dziedziczenie struktury i zachowania: * * Przy dziedziczeniu struktury mówimy, że podklasa dziedziczy atrybuty swojej nadklasy * * Przy dziedziczeniu zachowania mówimy że, podklasa dziedziczy metody swojej nadklasy. 251 Dziedziczenie Osoba Nazwisko data urodzenia Rodzice dzieci atrybuty wiek Zatrudniony Student ID studenta ID zatrudnionego wiek wiek metoda 252 Rozróżniamy dwa rodzaje dziedziczenia Pojedyncze - klasa może być podklasą tylko jednej nadklasy Wielokrotne - klasa może dziedziczyć atrybuty i metody od więcej niż jednej nadklasy 253 Integralność wewnętrzna (wynika ze związku między obiektami a klasami) * * integralność klasa – klasa (np. nadklasa student nie może być usunięta dopóki nie zostaną usunięte wszystkie powiązane z nią podklasy) * * integralność klasa – obiekt (np. klasa nie może być usunięta dopóty, dopóki nie zostaną usunięte wszystkie powiązane z nią obiekty) * * integralność dziedziny (atrybuty są definiowane we wcześniej utworzonych klasach) * * integralność referencyjna (podobnie jak w RBD skoro klasy mogą być powiązane z innymi klasami przez związki) 254 Integralność dodatkowa Wprowadzamy ją do OMD przez więzy umieszczone w treściach metod (Te dwa typy integralności są związane z logicznym stanem BD i są szczególnym przypadkiem integralności semantycznej) 255