TECHNOLOGIE BAZ DANYCH WYKŁAD 3 Diagramy związków encji. Funkcje agregujące. (Wybrane materiały) Dr inż. E. Busłowska Copyright 2014-2015 E. Busłowska. 1 DIAGRAMY ZWIĄZKÓW ENCJI (DZE) Metoda graficznej prezentacji tabel i kolumn. Obrazują podstawowe składniki bazy danych i związki między nimi. Encja zbiór obiektów reprezentowanych za pomocą jednakowej struktury (odpowiednik tablicy w finalnej bazie danych). Atrybuty - charakteryzują encje. Związek - określa wzajemne powiązania między encjami. W DZE encje zazwyczaj są opisywane rzeczownikami, atrybuty przymiotnikami i rzeczownikami, natomiast związki czasownikami. Copyright 2014-2015 E. Busłowska. 2 Przyjęta konwencja zapisu relacji Proces projektowania DZE Analiza problemu, pojawiające się często rzeczowniki, sugerują encje, które powinny wystąpić w diagramie. Dla każdej encji identyfikuje się atrybuty. Wykryć użycie tej samej nazwy dla dwóch różnych encji albo użycie dwóch różnych nazw dla tej samej encji. Zidentyfikować atrybuty tworzące klucze. Encje - prostokąty Atrybuty Obowiązkowe (wartość musi być zawsze określona) poprzedzone kółkiem. Opcjonalne (atrybut nie musi mieć wartości) poprzedzone okręgiem. Unikalne identyfikatory dla encji lub wchodzące w jego skład poprzedzone #. Związki Opcjonalność oznaczona linią przerywaną. Stopień wiele" oznaczony kurzą stopką. Należące do unikalnych identyfikatorów oznaczone poprzeczną kreską. Copyright 2014-2015 E. Busłowska. 3 Copyright 2014-2015 E. Busłowska. 4 Związki i ich symbole Oznaczenia: Jeden do jeden Jeden do wielu Związki jeden do jeden dla każdej instancji (przypadku) jednej encji istnieje dokładnie jedna instancja drugiej encji pozostająca z nią w rozważanym związku. Wiele do jeden Wygląd Preferuje Wiele do wielu Copyright 2014-2015 E. Busłowska. 5 Copyright 2014-2015 E. Busłowska. 6 1
Związki jeden do wielu dla każdej instancji jednej encji istnieje n instancji drugiej encji. Związki wiele do jednego dla wielu instancji jednej encji istnieje dokładnie jedna instancja drugiej encji. Wnosi Opłatę Cechy Ma Copyright 2014-2015 E. Busłowska. 7 Copyright 2014-2015 E. Busłowska. 8 Związki wiele do wielu - wielu wartościom jednej encji odpowiada wiele wartości drugiej encji Uproszczenie związku wiele do wielu przez dodanie encji Wybiera Wybiera Lista preferencji Występują w Copyright 2014-2015 E. Busłowska. 9 Copyright 2014-2015 E. Busłowska. 10 Związki rekurencyjne związki wiele do wielu lub jeden do jednego między jedną encją Każdy klient może być skojarzony z innym klientem Każdy klient może być skojarzony z wieloma klientami # IdPreferencji o Nazwa występują a # IdPreferencji # Idklienta Przykładowe encje wybiera Oplaty # IdOplaty ο Idklienta ο DataOplaty ο Wielkosc wnosi # Ida ο Nazwisko ο Imie ο Adres ο Telefon Copyright 2014-2015 E. Busłowska. 11 Copyright 2014-2015 E. Busłowska. 12 2
Problemy pojawiające się przy tworzeniu DZE Każda encja powinna być powiązana bezpośrednio z co najmniej jedną encją oraz każda encja powinna być powiązana pośrednio z każdą inną encją. Modelując należy wybiegać w przyszłość. Ważne jest jakie informacje są potrzebne aby odpowiedzieć na spodziewane pytania. Należy dążyć do jak najprostszego diagramu za pomocą zmniejszania do minimum liczby encji i związków. Funkcja podmieniająca znaki TRANSLATE(przekształcany_napis,zbiór_przeszu kiwania,zbór_podstawienia) podmienia znaki w napisie które określa drugi argument na odpowiadające im znaki trzeciego argumentu, REPLACE(podany_napis,jak,na_co) - wystąpienie w podany_napis ciąg jak zostanie zastąpione przez ciąg na_co Copyright 2014-2015 E. Busłowska. 13 Copyright 2014-2015 E. Busłowska. 14 Funkcje matematyczne POWER(liczba,n) - liczba do podanej potęgi, SQRT(liczba) - pierwiastek kwadratowy z podanej liczby, ABS(liczba) - wartość bezwzględna, MOD(liczba1, liczba2) - reszta z dzielenia. Copyright 2014-2015 E. Busłowska. 15 Funkcje trygonometryczne przykłady Select sin(60/180*3.14159265358979) from dual; sin(60/180*3.14159265358979).8660254 Select cos(60/180*3.14159265358979) from dual; cos(60/180*3.14159265358979).5 Select tan(60/180*3.14159265358979) from dual; tan(60/180*3.14159265358979) 1.7320508 Copyright 2014-2015 E. Busłowska. 16 Funkcje operujące na datach SQL> SELECT SYSDATE FROM dual; SYSDATE -------- 14/10/15 SQL> SELECT MONTH_BETWEEN(SYSDATE, Datazatr), ADD_MONTHS(Datazatr,6) FROM pracownicy; Konwersja między tekstem a liczbą TO_CHAR(wartość [,maska do formatowania]) przekształca argument wartość na jej postać znakową. SQL> SELECT NEXT_DAY(SYSATE, Monday ) FROM dual; SQL> SELECT LAST_DAY( 14/10/15 ), LAST_DAY( 14/10/14 ) FROM dual; Copyright 2014-2015 E. Busłowska. 17 Copyright 2014-2015 E. Busłowska. 18 3
Wyrażenia agregujące i funkcje grupowe Count([distinct] wyrażenie ) zlicza wiersze Min([distinct] wyrażenie ) wylicza minimalną wartość Max([distinct] wyrażenie ) - wylicza maksymalną wartość Avg([distinct] wyrażenie ) - wylicza średnią wartość Sum([distinct] wyrażenie ) wylicza sumę Copyright 2014-2015 E. Busłowska. 19 SQL> SELECT AVG(sal) ; AVG(SAL) 2133,33333 SQL> SELECT MIN(sal) Min_Wyn 3 WHERE job = 'CLERK'; MIN_WYN 800 Copyright 2014-2015 E. Busłowska. 20 SQL> SELECT COUNT(*) Ile, AVG(sal) Sred, MIN(sal) Min_Wyn, MAX(sal) Maks_Wyn FROM emp; ILE SRED MIN_WYN MAKS_WYN --------- 15 2133,33333 800 5000 Podać sumę zarobków wszystkich pracowników z pierwszego stopnia płacowego. SQL> SELECT SUM(sal), salgrade 3 WHERE salgrade.grade = 1 AND sal BETWEEN losal AND hisal; SUM(SAL) 2850 Copyright 2014-2015 E. Busłowska. 21 Copyright 2014-2015 E. Busłowska. 22 Podział krotek na grupy - klauzula GROUP BY Obliczyć średnie zarobki na każdym ze stanowisk pracy SQL> SELECT job, AVG(sal) 3 GROUP BY job; JOB AVG(SAL) --------- ANALYST 3000 CLERK 1037,5 KEEPER 2975 MANAGER 2758,33333 PRESIDENT 5000 SALESMAN 1400 Podział krotek na grupy i podgrupy Obliczyć średnie zarobki na każdym ze stanowisk pracy w każdym departamencie SQL> SELECT deptno, job, AVG(sal) 3 GROUP BY deptno, job; DEPTNO JOB AVG(SAL) --------- 10 CLERK 1300 10 MANAGER 2450 10 PRESIDENT 5000 20 ANALYST 3000 20 CLERK 950 20 KEEPER 2975 20 MANAGER 2975 30 CLERK 950 30 MANAGER 2850 30 SALESMAN 1400 10 wierszy zostało wybranych. Copyright 2014-2015 E. Busłowska. 23 Copyright 2014-2015 E. Busłowska. 24 4
Klauzula having Podać średnie zarobki tylko tych departamentów, które zatrudniają więcej niż trzech pracowników. SQL> SELECT deptno, AVG(sal), COUNT (*) 3 GROUP BY deptno 4 HAVING COUNT (*) > 3; DEPTNO AVG(SAL) COUNT(*) 20 2308,33333 6 30 1566,66667 6 Klauzula having Podać tylko te stanowiska, na których średnie zarobki wynoszą 3000 lub więcej SQL> SELECT job, AVG(sal) 3 GROUP BY job 4 HAVING AVG (sal) > =3000; JOB AVG(SAL) --------- ANALYST 3000 PRESIDENT 5000 Copyright 2014-2015 E. Busłowska. 25 Copyright 2014-2015 E. Busłowska. 26 Wyrażenia w klauzuli having Podać numery departamentów i różnice miedzy najwyższą i najniższa pensją w poszczególnych departamentach. Wyeliminować grupy z różnicą mniejszą od 2000. SQL> SELECT deptno, MAX(sal) - MIN(sal) Diff 3 GROUP BY deptno 4 HAVING MAX(sal) - MIN(sal)>=2000; DEPTNO DIFF - --------- 10 3700 20 2200 Copyright 2014-2015 E. Busłowska. 27 5