Plan wykładu Bazy danych Wykład 5: Projektowanie relacyjnych schematów baz danych. SQL - funkcje grupujce Małgorzata Krtowska Katedra Oprogramowania e-mail: mmac@ii.pb.bialystok.pl Proces dobrego projektowania relacyjnego schematu bazy danych: szczegółowy opis problemów, które wynikaj przy tworzenu schematu przedstawienie metody dekompozycji, która polega na podziale schematu relacji (zbioru atrybutów) na dwa mniejsze schematy opis postaci normalnej Boyce a-codda (BCNF) czyli taki warunek nałoony na schemat, dziki któremu mona wyeliminowa jego niedoskonałoci informacja o tym, w jaki sposób zapewni spełnienie warunków BCNF przez dekompozycj schematów relacyjnych SQL cd Bazy danych (studia dzienne) 2 Anomalie Dekompozycja relacji Anomalie - problemy, jakie powstaj, gdy próbujemy do pojedynczej relacji włczy zbyt wiele danych redundancja - dane niepotrzebnie powtarzaj si w kilku krotkach anomalie modyfikacji - sytuacje, w których warto zostaje zmodyfikowana w jednej krotce, a w innej nie anomalie usuni - usunicie krotki moe powodowa usunicie wanej informacji z bazy danych Dekompozycja relacji - sposób eliminowania wymienionych anomalii przez podział atrybutów relacji R midzy dwa schematy nowych relacji. Relacj R o schemacie {A 1 } dekomponujemy midzy dwie relacji S i T o schematach odpowiednio {B 1, B 2,..., B m } i {C 1, C 2,..., C k } według nastpujcych zasad: {A 1 } = {B 1, B 2,..., B m } {C 1, C 2,..., C k } Krotki relacji S powstaj przez rzutowanie wszystkich krotek relacji R na zbiór atrybutów {B 1, B 2,..., B m }, tzn. z kadej krotki t biecej instancji relacji R pobieramy wartoci atrybutów {B 1, B 2,..., B m } i tworzymy w ten sposób krotk relacji S. Jeeli z relacji R otrzymamy kilka jednakowych krotek w relacji S, w S umieszczamy tylko jedn kopi. W podobny sposób uzyskuje si krotki relacji T. Bazy danych (studia dzienne) 3 Bazy danych (studia dzienne) 4
Posta normalna Boyce a-codda Dekompozycja do postaci BCNF Posta normalna Boyce a-codda (BCNF) - warunek, którego spełnienie zapewnia, e w schemacie nie wystpuj omówione wczeniej anomalie. Relacja R jest w postaci normalnej BCNF wtedy i tylko wtedy, gdy dla kadej nietrywialnej zalenoci A 1 B, zbiór {A 1 } jest nadkluczem R Jeli proces dekompozycji bdziemy powtarza dostatecznie długo, to kada otrzymana relacja bdzie si składała z kolekcji podzbiorów atrybutów, które: bd schematami relacji w postaci BCNF dane z pierwotnej relacji bd wiernie reprezentowane w relacjach powstałych w wyniku dekompozycji => bdzie istniała moliwo dokładnego odtworzenia pierwotnej relacji, na podstawie relacji utworzonych przez wielokrotne dekompozycje. Strategia dekompozycji: Dane: relacja R z zalenociami funkcyjnymi ZF Znalezienie pewnej nietrywialnej zalenoci funkcyjnej {A 1 } {B 1, B 2,..., B m }, która narusza warunek BCNF (tzn. {A 1 } nie jest nadkluczem). Wyliczenie dopełnienia zbioru atrybutów {A 1 } +. Dopełnienie zawiera wszystkie atrybuty, gdy {A 1 } jest nadkluczem. Bazy danych (studia dzienne) 5 Bazy danych (studia dzienne) 6 Dekompozycja R do postaci BCNF Projektowanie zalenoci funkcyjnych Zamie relacj R na relacje o schematach: R 1 = {A 1 } + R 2 = (R-{A 1 } + ) {A 1 } R2 R 1 R-X + X X + -X Załoenia: w wyniku dekompozycji relacji R powstaje relacja S oraz jeszcze inna relacja. F - zbiór zalenoci funkcyjnych prawdziwych w R Aby wyznaczy zbiór zalenoci funkcyjnych prawdziwych w S, naley rozway wszystkie podzbiory X atrybutów S i dla kadego wyznaczy X +. Jeli atrybut B spełnia nastpujce warunki B naley do S B naley do X + B nie naley do X, to zaleno funkcyjna X B jest spełniona w relacji S R Bazy danych (studia dzienne) 7 Bazy danych (studia dzienne) 8
Problem Trzecia posta normalna Wystpuje jedna struktura zalenoci funkcyjnych, która moe powodowa problem w trakcie dekompozycji. AB C i C B Mówimy, e relacja jest w trzeciej postaci normalnej (3NF) wtedy i tylko wtedy, gdy jest spełniony nastpujcy warunek: jeli A 1 B jest zalenoci nietrywaln, to albo {A 1 } jest nadkluczem albo B jest elementem pewnego klucza. Bazy danych (studia dzienne) 9 Bazy danych (studia dzienne) 10 SQL Wyraenia arytmetyczne dla dat Funkcje operujce na datach Funkcje konwersji Funkcje polimorficzne Funkcje grupujce data + liczba - dodanie do daty pewnej liczby dni - wynikiem jest data data-liczba - odjcie od daty pewnej liczby dni - wynikiem jest data data-data - odjecie od daty innej daty, wynikiem jest liczba dni midzy nimi UWAGA: liczba moe by ułamkiem, wówczas do daty dodana zostanie odpowiednia liczba godzin, minut, sekund. Bazy danych (studia dzienne) 11 Bazy danych (studia dzienne) 12
Funkcja MONTHS_BETWEEN MONTHS_BETWEEN (data1, data2) - zwraca odstp pomidzy wyspecyfikowanymi datami wyraony w miesicach. Wynik dodatni, jeli data1 póniejsza od data2, lub ujemny w przeciwnym przypadku. Funkcja ADD_MONTHS ADD_MONTHS (data, n) - zwraca dat plus n miesicy kalendarzowych, n- całkowite, ale moe by ujemne. Jeli otrzymamy błdn dat (np. 30 lutego) wynikiem bdzie ostatnia sensowna data w otrzymanym miesicu. Bazy danych (studia dzienne) 13 Bazy danych (studia dzienne) 14 Funkcja NEXT_DAY NEXT_DAY(data1, dzie_tygodnia) - zwraca pierwsz po wskazanej dat, której dzie tygodnia jest taki jak wskazuje drugi argument. W argumencie podajemy numer lub nazw dnia tygodnia. Funkcja LAST_DAY LAST_DAY(data1) - wynikiem jest data ostatniego dnia w miesicu, do którego naley data1. Bazy danych (studia dzienne) 15 Bazy danych (studia dzienne) 16
Funkcja ROUND ROUND(data1) - wynikiem jest data1 ze wskanikiem godzinowym ustalonym na północ, jeli data1 wskazuje na godzin przed południem, lub na północ dnia nastpnego, gdy data1 wskazuje na godzin przed południem ROUND(data1, MONTH ) - wynikiem jest data pierwszego dnia miesica zawierajcego data1, gdy jest ona z pierwszej połowy miesica, lub pierwszego dnia nastpnego miesica w przeciwnym przypadku. ROUND(data1, YEAR ) - zaokrglenie do pierwszego dnia roku. Funkcja TRUNC TRUNC(data1, dokładno) - wynikiem jest data pierwszego dnia miesica zawierajcego data1, jeli dokładno jest MONTH lub pierwszego dnia roku, jeli dokładno jest YEAR. Bez drugiego argumentu funkcja powoduje usunicie składnika godzinowego z daty. Bazy danych (studia dzienne) 17 Bazy danych (studia dzienne) 18 Funkcje konwersji TO_CHAR (liczba data[,format ]) - zamiana liczby lub daty na cig znaków zgodny z formatem opisanym w parametrze format TO_NUMBER (tekst) - zamiana cigu znaków zawierajcych liczb na dan typu NUMBER TO_DATE( tekst, format ) - zamiana cigu znaków reprezentujcych dat w formacie opisanym w parametrze format na dan typu DATE Funkcja TO_CHAR konwersja dat Przykłady formatów dat: YYYY, YYY, YY, Y - 4, 3, 2,lub ostatnia cyfra roku MM - miesic MONTH - nazwa miesica DDD, DD, D - dzie roku, miesica lub tygodnia DAY - nazwa dnia tygodnia HH - godzina MI - minuta; SS - sekunda Bazy danych (studia dzienne) 19 Bazy danych (studia dzienne) 20
Formaty dla liczb: Funkcja TO_CHAR konwersja liczb Wzorzec Znaczenie Przykład 9 Pozycja cyfry liczba 99999 1234 dziewitek okrela szeroko wywietlania) 0 Wywietlani zer 099999 001234 wiodcych $ Ruchomy znak dolara $99999 $1234. Pozycja kropki dziesitnej 99999.99 1234.00 Funkcje polimorficzne Funkcja DECODE Funkcje polimorficzne - funkcje, które nie s zwizane ze szczególnym typem danych, działaj podobnie dla wielu rónych danych. DECODE - umoliwia warunkow realizacj zapyta, gdy działa na zasadzie typu case czy if-then-else z innych jzyków. DECODE(wyraenie, wyr1, wynik1, [wyr2, wynik2,...] wynik domylny) Uwagi: wyraenie moe by dowolnego typu warto wyr musz by takiego samego typu jak wyraenie Bazy danych (studia dzienne) 21 Bazy danych (studia dzienne) 22 Inne funkcje NVL (wyraenie1, wyraenie2) - zmienia warto NULL w pierwszym argumencie na warto2 GREATEST (warto1, warto2,...) - zwraca najwiksz warto z listy LEAST(warto1, warto2,...) - zwraca najmniejsz warto sposród podanych argumentów Funkcje grupowe Funkcje grupowe s przeznaczone do działania na grupach wierszy. Wynikiem działania funkcji grupowej jest pojedyncza warto dla całej grupy, a nie jedna warto dla kadego wiersza. Przykłady funkcji: AVG ([DISTINCT] wyraenie) COUNT ([DISTINCT] wyraenie) COUNT(*) MAX ([DISTINCT] wyraenie) MIN ([DISTINCT] wyraenie) STDDEV ([DISTINCT] wyraenie) SUM ([DISTINCT] wyraenie) VARIANCE ([DISTINCT] wyraenie) Wszystkie funkcje grupowe, z wyjtkiem count(*) ignoruj NULL. Bazy danych (studia dzienne) 23 Bazy danych (studia dzienne) 24
Zapytania grupujce SELECT lista pól FROM tabele WHERE warunki przed grupowaniem GROUP BY pola grupujce HAVING warunki po grupowaniu Zasady wykonania zapytania grupujcego Rozwa wszystkie kombinacje wierszy tabel wystpujcych w klauzuli FROM Do kadego wiersza zastosuj warunek WHERE Podziel wiersze na grupy Do kadej grupy zastosuj warunek w klauzuli HAVING Dla kadego wiersza reprezenujcego grup oblicz wartoci wyrae po SELECT Bazy danych (studia dzienne) 25 Bazy danych (studia dzienne) 26 Zapytania grupujce - ograniczenia Na licie wyboru polecenia SELECT uywajcego grupowania wolno umieszcza tylko te kolumny, które s przedmiotem działania klauzuli GROUP BY chyba, e wystpuj one wewntrz funkcji grupujacej. Kada kolumna lub wyraenie wystepujce na licie SELECT, nie objte funkcj grupow musi by przedmiotem grupowania klauzul GROUP BY. Bazy danych (studia dzienne) 27