Bazy danych 1 - Laboratorium
Podstawowe informacje
- Wysyłane wiadomości e-mail proszę tytułować oraz dodawać przedrostek [BD1]. Brak takiego przedrostka może spowodować znaczące wydłużenie czasu odpowiedzi na wiadomość.
- W dokumentacjach proszę o podanie informacji organizacyjnych (autor, adres mail, temat projektu, semestr, itp.). W dokumentacji mile widziana jest konstruktywna krytyka. Co było ciekawe albo trudne. Co można zrobić inaczej następnym razem przy podobnym problemie.
- Każdy fragment kodu powinen być czytelnie sformatowany oraz (w przypadkach nietrywialnych) opisany zwięzłym komentarzem.
- Każdy z modułów należy dokumentować w zbiorczej, inkrementalnej dokumentacji do oddania na koniec cyklu laboratoriów.
Zakres materiału
Informacje zawarte tutaj są tylko wyszczególnieniem kluczowych aspektów każdego z modułów.
Pełną treść zadań podaje prowadzący laboratorium.
Moduł 1a - Lab 2 - Model związków-encji
- Celem zadania jest przeniesienie fragmentu rzeczywistości do modelu związków-encji.
- Temat najlepiej autorski, specjalistyczny.
- Model powinien być odpowiednio rozbudowany, co pozwoli na łatwiejszą realizację kolejnych etapów.
- Wynikowy model wraz z komentarzem powinien być w formie graficznej. Jeśli będzie to forma odręczna, to powinna być bardzo czytelna.
Moduł 1b - Lab 3 - Model relacyjny
- Celem zadania jest stworzenie oraz implementacja modelu relacyjnego.
- Model związków-encji i relacyjny to nie dokładnie to samo. Pomimo wielu podobieństw.
- Nalezy zwrócić uwagę na nadawanie kluczy (różnego rodzaju).
- Wykonać co najmniej jedną normalizację przy tworzeniu modelu (z prezentacją wersji modelu bez normalizacji).
Moduł 2 - Lab 4-5 - Język SQL
- Celem zadania jest realizacja zapytań SQL.
- Należy stworzyć skrypty tworzące, usuwające oraz wypełniające przykładowymi danymi bazę danych.
- Należy stworzyć skrypty nietrywialne (wykorzystujące podzapytania, klauzury JOIN, HAVING; grupujące, zliczające).
- Należy zrealizować co najmniej jedną tzw. perspektywę.
Moduł 3 - Lab 6-7 - Aplikacja
- Celem zadania jest wykonanie aplikacji klienckiej mającej dostęp do bazy danych.
- Brak ograniczeń na język programowania. Może to być JAVA, C++, C#, Python, itp.
- W programie należy zaimplementować szereg zapytań SQL o nie sztywnej strukturze.
- W programie należy zaimplementować oraz pokazać zasadność tzw. transakcji.
Moduł 4 - Lab 8-9 - Procedury
- Celem zadania jest wykorzystanie bardziej zaawansowanych możliwości udostępnianych w bazach danych.
- Należy stworzyć własne procedury oraz funkcje, jak również pokazać działanie kilku wbudowanych.
- Należy zrealizować szereg tzw. wyzwalaczy o pokazać zasadność z korzystania z nich.
- Wykorzystać tzw. kursor w złożonym przypadku wymagającym przetwarzania rekord po rekordzie.
Uszczegółowienie
- Należy stworzyć co najmniej jedną własną procedurę.
- Należy stworzyć co najmniej jedną własną funkcję (FUNCTION).
- Należy stworzyć co najmniej trzy wyzwalacze w różnych konfiguracjach (BEFORE, AFTER, FOR EACH ROW, INSTEAD OF, ...) na różne operacje (INSERT, DELETE, ...).
- Należy stworzyć co najmniej jedną sekwencję (SEQUENCE). Chodzi o mechanizm generujący kolejne wartości liczbowe.
- Należy stworzyć co najmniej dwa kursory (CURSOR).
- Należy zastosować wyjątek (EXCEPTION).
- Należy, poza samą realizacją podanych funkcjonalności, rozumieć je oraz móc w stanie powiedzieć czym się charakteryzują oraz różnią.
- Do każdego podzadania powinien być dołączony komentarz (może być w dokumentacji) tłumaczący, co np. dana procedura realizuje.
- Każdy przykład powinien być, w miarę możliwości, semantycznie uzasadniony.
- Niektóre możliwości mogą nie być dostępne w wybranym produkcie bazodanowym (MySQL, Oracle, ...).
Moduł 5 - Lab 10-11 - Wydajność
Celem zadania jest analiza pewnych aspektów wydajności bazy danych.
W skrócie, należy sprawdzić wpływ indeksów (INDEX) na czas wykonywanych zapytań.
Jednocześnie należy zbadać wpływ innych aspektów wpływających na plan wykonywanych zapytań z pomocą polecenia EXPLAIN.
W przypadku tego zadania konieczne jest wypełnienie bazy danych odpowiednio spreparowanymi danymi o sporej objetości. Wymagane jest stworzenie skryptów wypełniających wybrane tabele znaczną ilością krotek (dziesiątki-setki tysięcy rekordów) oraz skryptów usuwających te dane.
Zaleca się stosowanie tradycyjnych dysków twardych (tj. talerzowych) przechowujących dane z bazy jeśli projekt jest realizowany na własnym komputerze. Jeśli dane z bazy są przechowywane na dysku typu SSD, wyniki będą znacząco odmienne od oczekiwanych.
W przypadku korzystania z połączenia z uczelnianą bazą danych, należy zwrócić uwagę na fakt, że ustawione są limity na jednokrotne wprowadzenie danych (bodajże kilka tysięcy na raz). Przekroczenie limitu może powodować czasowy (bodajże godzina) brak możliwości nawiązania połączenia z bazą.
- Należy wybrać trzy różne tabele z własnej struktury bazy
- Dla każdej z tabel należy wykonać szereg eksperymentów w scenariuszu bez indeksu oraz z indeksem.
- Dla każdej z dwóch scenariuszy przeprowadzić pomiar czasu zapytania w około 10 wariantach różniących się wypełnieniem tabeli krotkami (od około 100 krotek do około 100000).
- Pomiar czasu zapytania ma postać średniej oraz odchylenia standardowego z 5-50 identycznych zapytań na identycznych danych. Wykonanie pojedynczego zapytania jest zwielokrotnione ze względu na wyeliminowanie czynnika losowego. Liczba 5-50 jest związana z tym, że dla tabeli mało wypełnionej czas wykonania zapytania jest mały: wtedy należy zrealizować około 50 zapytań. Dla zapytań, których czas trwania liczy się w kilkudziesięciu sekundach, 5 realizacji powinno być wystarczające.
- Na podstawie wyników należy określić czasową złożoność obliczeniową dla tabel z indeksem oraz bez indeksu.
- Należy zaznajomić się ze słowem kluczowym EXPLAIN i wynikami zwracanymi przez to narzędzie dla co najmniej pięcioma zapytaniami SQL typu SELECT o różnym stopniu złożoności (można wykorzystać zapytania z poprzednich laboratoriów):
- proste zapytanie z jednej tabeli;
- złączenie z dwóch tabel z filtrami (min. dwa zapytania);
- złączenie z wielu tabel z grupowaniem i filtrami (min. dwa zapytania).
- Należy pokazać czy i jaki wpływ na wyniki zwracane przez EXPLAIN ma założenie indeksu na kluczach wybranych tabel.
- Należy pokazać czy i jaki wpływ na wyniki zwracane przez EXPLAIN mają znaczne różnice (około 2 rzędy wielkości) w wielkości wypełnionych tabel wykonywanych przy złączeniach.
- Słowo kluczowe EXPLAIN nie jest zdefiniowane w standardzie SQL, ale większość komercyjnych baz danych (m.in. Oracle, MySQL, PostgreSQL) implementuje tę funkcjonalność. Z tego powodu wyniki otrzymywane z tego narzędzia mogą się różnić w swojej formie.
Moduł 6 - Lab 12 - Zakończenie
- Celem zadania jest podsumowanie dotychczasowych prac.
- W sposób krytyczny nalezy dokonać analizy zrealizowanych działań i wskazać najsłabsze punkty rozwiązania.
- Należy wskazać elementy, które przy kolejnej realizacji dobrze byłoby zrobić inaczej
- Należy zauważyć, że nie jest to tzw. termin dodatkowy. Na tych zajęciach powinna zostać oddana końcowa dokumentacja.
Ostatnia aktualizacja: 2018-04-23 10:40