Uruchom bazę danych Hobby z listy 2. Utwórz indeksy dla tabel:
- dla tabeli
osobaindeks na kolumnieimię,- dla tabeli
osobaindeks na kolumniedataUrodzenia,- dla tabeli
sportindeks na grupie kolumn (id,nazwa),- dla tabeli
inneindeks na grupie kolumn (nazwa,id),- dla tabeli
hobbyindeks na grupie kolumn (osoba,id,typ).Wskaż które indeksy istniały wcześniej. Wskaż te, do których istniał wcześniej podobny indeks. Uzasadnij wybór typu indeksu dla każdego z podpunktów.
Utwórz zapytania zgodne z poniższą specyfikacją. Sprawdź, w których przypadkach zostaną wykorzystane indeksy. Czy wybór typu indeksu miał wpływ na wykorzystanie indeksu?
- Znajdź płeć wszystkich osób o imieniu rozpoczynającym się od ‘A’.
- Wypisz posortowaną listę nazw sportów drużynowych.
- Wypisz pary (id) sportów indywidualnych, które uprawiane są w tej samej lokacji.
- Znajdź wszystkie osoby urodzone przed 2000-01-01.
- Znajdź nazwę najpopularniejszego hobby.
- Wypisz imię najstarszego posiadacza psa.
Utwórz tablę
zawodyo kolumnachid,nazwa,pensja min,pensja maxoraz tabelępracazawierającą informację o id zawodu, id osoby oraz jej zarobkach.
Korzystając z pętli uzupełnij tabelęzawodyprzynajmniej 10 różnymi zawodami (zadbaj o poprawne widełki płacowe), a następnie, z wykorzystaniem kursora na tabeliosoba, przypisz każdej osobie zawód (wraz z odpowiednią pensją) i uzupełnij tabelępraca.Napisz procedurę, która przyjmując dwa parametry wejściowe:
aggorazkolwypisuje wynik o schemacie (kol,agg, ), gdzie jest wynikiem zastosowania funkcji agregującejaggna kolumniekolw tabeliosobalub zwróci informację o błędzie. Możliwe wykorzystanie:
- funkcja
COUNTna kolumnie imię lub płeć- funkcja
GROUP_CONCATna dowolnej kolumnie nie będącej id- funkcja
MIN,MAXorazAVGna kolumniedataUrodzenia, przy czym wynikAVG(w związku z działaniem średniej na dacie) powinien zwracać średni wiek w dniu wywołania procedury- funkcja
STDorazVAR_POPna kolumniedataUrodzenia, działająca analogicznie do funkcjiAVGZałóż obecność użytkownika, próbującego dokonać zmian w strukturze jak i zawartości bazy danych, próbującego wywołać błąd funkcji lub poznać strukturę tabel. Zadbaj o poprawność i bezpieczeństwo działania.
Utwórz tabelę
hasłazawierającą informacje o id osoby oraz jej haśle. W kolumnie odnoszącej się do hasła przechowuj tylko hash hasła (wykorzystaj funkcjęmd5()lubsha1(). Napisz procedurę przyjmujacą jako parametry imię osoby oraz jej hasło, a następnie hashuje je (wykorzystując odpowiednią funkcję) i w przypadku zgodności, zwraca datę urodzenia osoby, w przypadku braku zgodności wypisuje losową datę (losowa data powinna uwzględniać wymagania odnośnie pełnoletności oraz nie implikować osób ponad 100letnich).Pobierz WebGoat i uruchom na swoim komputerze (w celu uniknięcia podatności możesz rozłączyć się z internetem). Wykonaj tutorial odnośnie Injection Flaws:
- opcjonalnie – SQL Injection (introduction)
- SQL Injection (advanced)
- SQL Injection (mitigation)
Wybierz jedną z sekcji (advanced lub mitigation) i opisz wykonane ćwiczenia oraz wyciągnięte wnioski. Raport wyślij prowadzącemu zajęcia co najmniej 24 godziny przed terminem oddania.
Wykorzystując CTE oraz rekursję napisz zapytanie obliczające liczbę dla nieujemnych liczb całkowitych . Pamiętaj o warunkach brzegowych . Wywołaj zapytanie dla oraz .
Napisz procedurę, która jako parametr wejściowy przyjmuję nazwę zawodu, a następnie daje wszystkim wykonującym ten zawód 10% podwyżki przy zachowaniu ograniczeń wynikającymi z widełek płacowych w tabeli
zawody. Operacja powinna wykonać się transakcyjnie, tzn. albo wszyscy pracownicy danego zawodu dostają podwyżkę albo (przy przekroczeniu widełek przez przynajmniej jedną osobę) nikt.Napisz procedurę, która przyjmuje jako parametr nazwę zawodu, a następnie zwraca, na podstawie tabeli
praca, informacje na temat średniej pensji osób pracujących w danym zawodzie przy zachowaniu 0.03–prywatności różnicowej. Zadbaj o to, by zwracany wynik nie wykraczał poza widełki dla danego zawodu.Zrób Backup bazy danych tej listy. Usuń bazę danych, a następnie ją przywróć z backupu. Sporządź krótki raport z wykonanych czynności. Uwzględnij zarówno obsługę w swoim IDE jak i wykorzystanie wyłącznie linii komend. Wyjaśnij różnicę między backupem pełnym a różnicowym. Raport wyślij prowadzącemu zajęcia co najmniej 24 godziny przed terminem oddania.
Pliki ex-*.sql zawierają zadane kwerendy.
Raporty do zadań 6 oraz 10 znajdują się w osobnych dokumentach MD.