Bazy danych 2013/14. Egzamin. (5 pkt). Baza danych przechowuje w relacji binarnej G graf skierowany.

Podobne dokumenty
Bazy danych. dr inż. Arkadiusz Mirakowski

Bazy Danych egzamin 9 luty, 2012 rozwiazania

Hurtownie danych. Przetwarzanie zapytań. ZAPYTANIA NA ZAPLECZU

Wykład XII. optymalizacja w relacyjnych bazach danych

77. Modelowanie bazy danych rodzaje połączeń relacyjnych, pojęcie klucza obcego.

Relacyjne bazy danych. Podstawy SQL

Język SQL, zajęcia nr 1

Optymalizacja w relacyjnych bazach danych - wybór wydajnej strategii obliczania wyrażenia relacyjnego.

Autor: Joanna Karwowska

Wykład 6. SQL praca z tabelami 3

Struktura drzewa w MySQL. Michał Tyszczenko

3. Podzapytania, łączenie tabel i zapytań

Paweł Rajba

Optymalizacja zapytań. Proces przetwarzania i obliczania wyniku zapytania (wyrażenia algebry relacji) w SZBD

Oracle11g: Wprowadzenie do SQL

Bazy danych 11. Algorytmy złaczeń. P. F. Góra

Bazy danych wykład dwunasty. dwunasty Wykonywanie i optymalizacja zapytań SQL 1 / 36

Relacyjne bazy danych. Podstawy SQL

Wykład 8. SQL praca z tabelami 5

opisuje nazwy kolumn, wyrażenia arytmetyczne, funkcje nazwy tabel lub widoków warunek (wybieranie wierszy)

Zadania z SQLa (MS SQL Server)

Zasady transformacji modelu DOZ do projektu tabel bazy danych

Widok Connections po utworzeniu połączenia. Obszar roboczy

Przykładowa baza danych BIBLIOTEKA

Optymalizacja poleceń SQL Metody dostępu do danych

Wykład 5. SQL praca z tabelami 2

SIECI KOMPUTEROWE I BAZY DANYCH

Technologie baz danych

Bazy danych. Plan wykładu. Zależności funkcyjne. Wykład 2: Relacyjny model danych - zależności funkcyjne. Podstawy SQL.

Podstawowe zapytania SELECT (na jednej tabeli)

Bazy danych. Plan wykładu. Diagramy ER. Podstawy modeli relacyjnych. Podstawy modeli relacyjnych. Podstawy modeli relacyjnych

Wykład 05 Bazy danych

Model relacyjny. Wykład II

KOLEKCJE - to typy masowe,zawierające pewną liczbę jednorodnych elementów

Projektowanie bazy danych. Jarosław Kuchta Projektowanie Aplikacji Internetowych

Bazy danych. Bazy danych. Podstawy języka SQL. Dr inż. Paweł Kasprowski.

Grupowanie i funkcje agregujące

Przykłady najlepiej wykonywać od razu na bazie i eksperymentować z nimi.

UPDATE Studenci SET Rok = Rok + 1 WHERE Rodzaj_studiow =' INŻ_ST'; UPDATE Studenci SET Rok = Rok 1 WHERE Nr_albumu IN ( '111345','100678');

Wykład :45 BD-1 W_3

Ćwiczenia laboratoryjne nr 11 Bazy danych i SQL.

Bazy Danych - Instrukcja do Ćwiczenia laboratoryjnego nr 8

BAZY DANYCH LABORATORIUM. Studia niestacjonarne I stopnia

Systemy GIS Tworzenie zapytań w bazach danych

Podstawy języka SQL. SQL Structured Query Languagestrukturalny

Uniwersytet Zielonogórski Instytut Sterowania i Systemów Informatycznych Bazy Danych - Projekt. Zasady przygotowania i oceny projektów

Bazy danych. Bazy danych. Zapytania SELECT. Dr inż. Paweł Kasprowski.

Model relacyjny. Wykład II

Wstęp 5 Rozdział 1. Podstawy relacyjnych baz danych 9

Konstruowanie Baz Danych SQL UNION, INTERSECT, EXCEPT

Bazy danych. Dr inż. Paweł Kasprowski

Bazy danych. Wykład IV SQL - wprowadzenie. Copyrights by Arkadiusz Rzucidło 1

PODZAPYTANIE (SUBSELECT)

Język SQL, zajęcia nr 2

Grupowanie i funkcje agregacji. Grupowanie z użyciem rollup

1 Wstęp do modelu relacyjnego

SQL Server i T-SQL w mgnieniu oka : opanuj język zapytań w 10 minut dziennie / Ben Forta. Gliwice, Spis treści

Przestrzenne bazy danych Podstawy języka SQL

Grupowanie i funkcje agregacji

SQL :: Data Definition Language

"Kilka słów" o strojeniu poleceń SQL w kontekście Hurtowni Danych wprowadzenie. Krzysztof Jankiewicz

Indeksowanie w bazach danych

Odnawialne Źródła Energii I rok. Tutorial PostgreSQL

Teoretyczne podstawy informatyki

Wprowadzenie do baz danych

Bazy danych 10. SQL Widoki

Algebra relacji. nazywamy każdy podzbiór iloczynu karteziańskiego D 1 D 2 D n.

Modelowanie hierarchicznych struktur w relacyjnych bazach danych

Laboratorium nr 4. Temat: SQL część II. Polecenia DML

Plan wykładu. Klucz wyszukiwania. Pojęcie indeksu BAZY DANYCH. Pojęcie indeksu - rodzaje indeksów Metody implementacji indeksów.

Oracle PL/SQL. Paweł Rajba.

SQL (ang. Structured Query Language)

Podzapytania. Rozdział 5. Podzapytania. Podzapytania wyznaczające wiele krotek (1) Podzapytania wyznaczające jedną krotkę

Język SQL. Rozdział 2. Proste zapytania

Aby uruchomić program klienta i połączyć się z serwerem, należy komendę:

STROJENIE PRZETWARZAŃ SAS

Bazy danych. Andrzej Grzybowski. Instytut Fizyki, Uniwersytet Śląski

SQL SERVER 2012 i nie tylko:

Relacji między tabelami klucze obce. Schemat bazy danych, wczytanej z pliku create_tables.sql. Klucz obcy jako ograniczenie dla kolumny

Obiektowość BD Powtórka Czas odpowiedzi. Bazy Danych i Systemy informacyjne Wykład 14. Piotr Syga

RBD Relacyjne Bazy Danych

P o d s t a w y j ę z y k a S Q L

koledzy, Jan, Nowak, ul. Niecała 8/23, , Wrocław, , ,

Cel przedmiotu. Wymagania wstępne w zakresie wiedzy, umiejętności i innych kompetencji 1 Język angielski 2 Inżynieria oprogramowania

Podstawy technologii WWW

Autor: Joanna Karwowska

Bazy danych 12. SQL To i owo. Algorytmy złaczeń.

Wybór EUROPEAN będzie rozpoznawał dzień przed miesiącem, natomiast US miesiąc przed dniem.

Technologie baz danych

strukturalny język zapytań używany do tworzenia i modyfikowania baz danych oraz do umieszczania i pobierania danych z baz danych

Wstęp Wprowadzenie do BD Podstawy SQL. Bazy Danych i Systemy informacyjne Wykład 1. Piotr Syga

PRZESTRZENNE BAZY DANYCH WYKŁAD 2

PLAN WYKŁADU BAZY DANYCH MODEL DANYCH. Relacyjny model danych Struktury danych Operacje Integralność danych Algebra relacyjna HISTORIA

Bazy danych 6. Podzapytania i grupowanie. P. F. Góra

ACESS- zadania z wykorzystaniem poleceń SQL

Optymalizacja poleceń SQL

SIECI KOMPUTEROWE I BAZY DANYCH

Złączenie CROSS JOIN jest to tzw. złączenie krzyżowe, którego ogólna postać wygląda następująco:

Podzapytania. Rozdział 5. Podzapytania. Podzapytania wyznaczające wiele krotek (1) Podzapytania wyznaczające jedną krotkę

Transkrypt:

Bazy danych 2013/14. Egzamin Zadanie 1 (5 pkt). Baza danych przechowuje w relacji binarnej G graf skierowany. (a) Napisz formułę logiki pierwszego rzędu ϕ(x, y) bez kwantyfikatorów,, która definiuje zapytanie równoważne wyrażeniu π 1,2 σ 2=3,1=4 ( (G σ1=2 G) (G σ 1=2 G) ). (b) Napisz wyrażenie algebry relacji E, które definiuje zapytanie równoważne formule ψ(x, y) danej jako z ( (G(x, z) G(z, y)) = (z = x z = y) ). Zadanie 2 (5 pkt). Dana jest tabela Pracownicy(numer, imie, szef), gdzie szef to numer szefa. Napisz zapytanie w dowolnym z poznanych formalizmow (datalog, algebra relacji z iteracją lub SQL z rekurencją), które zwróci imiona pracowników, którzy mają co najwyżej pięciu niebezpośrednich podwładnych. Zadanie 3 (5 pkt). W bazie danych przechowujemy informacje w tabelach: Połączenia(telefon, klient, data, czastrwania, koszt, taryfa) Taryfy(nrTaryfy, nazwataryfy) Klienci(nrKlienta, nazwaklienta, typklienta) W tej chwili w bazie znajdują się zapisy o 3 250 358 połączeniach, 1 543 klientach i 13 taryfach, przy czym 89% połączeń wykonali klienci typu C15. Na podstawie tych danych będzie przygotowywany raport oparty na poniższym zapytaniu: select nazwa_klienta, sum(czastrwania) from Połączenia p, Taryfy t, Klienci k where p.klient=k.nrklienta and p.taryfa = t.nrtaryfy and t.nazwataryfy like TANI% and k.typklienta in ( B1, B15, I10, BB ) and p.data between 15.06.2009 and 15.07.2009 group by nazwa_klienta; Należy wskazać najlepszy plan realizacji tego zapytania. Można w tym celu zaproponować wspierające je struktury pomocnicze. Oszacować koszt realizacji tego planu w operacjach wejścia/wyjścia na blokach dyskowych zakładając, że w jednym bloku mieści się 100 połączeń lub 50 klientów lub 200 taryf, a w pamięci operacyjnej mieści się 100 bloków. Zadanie 4 (10 pkt). Diagram przedstawia model danych dla Olimpiady Zimowej.

Podsumujmy wiadomości widoczne na diagramie: każdy zawodnik należy do co najwyżej jednej drużyny (drużyny występują tylko w odniesieniu do sportów drużynowych, takich jak hokej; w innych sportach, takich jak łyżwiarstwo figurowe, przyjmujemy że zawodnik przypisany jest jedynie do reprezentacji). Każdy zawodnik może mieć jednego lub więcej trenerów, natomiast trener może trenować 0 lub więcej zawodników. Dla uproszczenia przyjmujemy, że każdy zawodnik występuje w dokładnie jednej dyscyplinie. Poza tym zachodzi szereg oczywistych zależności: zawodnik występuje w dokładniej jednej reprezentacji, trener pracuje dla dokładniej jednej reprezentacji, drużyna należy do dokładniej jednej reprezentacji, zawodnik może występować wielokrotnie podczas olimpiady, w szczególności w encji Zawodnik atrybut idzawodnika wyznacza nazwisko oraz dyscplinę, ale nie wyznacza atrybutu DataWystepu, Klucze dla poszczególnych encji to odpowiednio Kraj, IdTrenera, (IdZawodnika, DataWystepu) i IdDruzyny. Zaproponuj realizację tego modelu za pomocą tabel, troszcząc sie o to, by tabele były w BCNF, jeśli to możliwe bez utraty zależności funkcyjnych (uzasadnij, że są w BCNF, lub dlaczego nie mogą być w BCNF bez utraty zależności).

Rozwiązania Zadanie 1 (a) Chyba nie da sie inaczej: E(x, y) E(y, x) (x = y). (b) Na przykład: ( (π 1 G π 2 G) (π 1 G π 2 G) π 1,4 σ 2=3 (G σ1=2 G) (G σ 1=2 G) ). Podwyrażenie (π 1 G π 2 G) wybiera wszystkie wierzchołki grafu. Zadanie 2 Można na przykład tak: WITH RECURSIVE sub(numer, imie, szef, szefszefow) AS ( SELECT numer, imie, numer, numer FROM pracownicy UNION ALL SELECT pracownicy.*, szefszefow FROM pracownicy, sub WHERE pracownicy.szef = sub.numer ) SELECT pracownicy.imie FROM sub RIGHT JOIN pracownicy ON sub.szefszefow = pracownicy.numer AND sub.szef!= sub.szefszefow GROUP BY pracownicy.numer, pracownicy.imie HAVING COUNT(szefszefow) < 5; Zadanie 3 Rozwiązań możliwych do zaakceptowania jest w tym zadaniu wiele, dlatego oprócz pewnego rozwiązania wzorcowego (które jednak nie jest jedynym obowiązującym) zostanie tutaj przedstawione wiele komentarzy na temat lepszych i gorszych elementów, jakie w rozwiązaniach mogły się pojawić. Rozwiązanie wzorcowe: 1. Dane dotyczące taryf i klientów zajmują w sumie 32 bloki. Zmieszczą się więc w pamięci należy je tam wczytać, równocześnie dokonując selekcji klientów tych typów, które występują w zapytaniu. 2. Nie da się na podstawie danych z zadania oszacować ile bloków dla klientów pozostanie, jednak da się uzasadnić, że dane o klientach z ew. już usuniętą informacją o typie klienta, natomiast z przygotowanym miejscem do zliczania sumy czasu rozmów nadal zmieszczą się w pamięci informacji o połączeniach, gdzie jest m.in. nr klienta i czas rozmowy mieści się w bloku 100, klientów jest 1,5 tyś, daje to w najgorszym wypadku 15 dodatkowych bloków, czyli cały czas pozostaje ponad 50 wolnych bloków pamięci do przetwarzania połączeń. 3. Ponieważ interesować nas będzie jedynie 11% połączeń, dostęp do tabeli połączeń powinien zostać zorganizowany inaczej niż przez liniowe przejrzenie tabeli. Do wzorcowego rozwiązania przyjmijmy, że mamy indeks wewnętrzny (hash) po klientach (inne możliwe rozwiązania patrz komentarze).

4. Złączenie będzie realizowane przez wersję algorytmu Nested Loops, gdzie z jednej strony następuje iteracja po klientach (już tylko tych odpowiednich typów), a z drugiej po połączeniach, gdzie początek interesującego nas bloku połączeń odnajdujemy za pomocą funkcji mieszającej. W trakcie przechodzenia przez połączenia dla konkretnego klienta weryfikujemy, czy dotyczą one interesującej nas taryfy oraz daty i odpowiednio poprawiamy sumę czasów połączeń dla klienta. Koszty: Taryfy czytane są raz 1 odczyt. Klienci czytani są do pamięci raz - 31 odczytów. Odczytamy około 0,11*(3 250 358/100) bloków z tabeli połączeń około 360 odczytów. Komentarze. Zapytanie składa się generalnie rzecz biorąc z dwóch złączeń, trzech selekcji oraz grupowania. Uwaga o 89% połączeń wykonywanych przez klientów typu C15 (czyli takich, których nie występują w zapytaniu) miała posłużyć jako wskazówka, że opłaca się zaprojektować dostęp do tablicy połączeń inaczej niż przez liniowe przeglądanie. Podobnie informacje dotyczące ilości rekordów w tabelach miały służyć jako wskazówki, że: nie ma żadnego znaczenia (ani sensu) robienie jakiś wymyślnych struktur dostępu do taryf tak czy tak zajmują one jeden blok, a jeden odczyt to i tak najlepsze co się da osiągnąć; tabela klientów zajmuje 31 bloków czyli zmieści się w pamięci. Tabela połączeń ma o kilka rzędów wielkości więcej danych niż pozostałe, tak więc organizacja dostępu do niej jest najbardziej wrażliwą częścią zadania. Oprócz tego co zaproponowano w rozwiązaniu wzorcowym, możliwe jest zastosowanie wielu innych pomysłów. Można zrobić indeks typu B+ drzewo po klientach po klientach i datach ew. po klientach, datach i czasach rozmów to po to, aby nie wszystkie dane do obliczeń były w indeksie i nie trzeba było robić ekstra odwołania do tabeli. W pierwszych dwóch wypadkach mamy jeszcze wybór między indeksem wewnętrznym (czyli jakąś formą klastra indeksowego) lub klasycznym indeksem zewnętrznym. Wszystkie te rozwiązania niosą ze sobą trudność oszacowania kosztu nawigacji po indeksie, z zadaniu nie ma informacji o rozmiarach kolumn, więc z góry jesteśmy skazani na szacunki, a nie dokładne obliczenia. Pomysł dodania do indeksu również daty nie jest zły, ale z informacji przekazanych w zadaniu nie wynika, czy na tym coś zyskamy wiemy, że wybierzemy co

najwyżej 11% zawartości tabeli połączeń ze względu na typy klientów, natomiast jak rozłożone są daty połączeń i czy to jakoś dodatkowo ograniczy wolumen przeglądanych wierszy nie wiadomo. Indeksy bitmapowe. Jako ciekawostkę (znajomość tego nie była wymagana, więc i nie oczekiwano takich pomysłów w rozwiązaniach) można dodać ewentualność zorganizowania na połączeniach map bitowych dotyczących taryf i/lub klientów. Taka mapa bitowa (patrz np. indeksy bitmapowe w Oracle) może być użyta do zakodowania taryf lub klientów występujących w złączeniach i w ten sposób, po wstępnym wyliczeniu np. zbioru nr taryf interesujących w zapytaniu można już zrezygnować ze realizacji złączenia tabel na rzecz wyszukiwania w mapie bitowej (na połączeniach) pasujących rekordów. Operacje na mapach bitowych to szybko realizowane operacje OR lub AND (logiczne na bitach). Można też łącznie uwzględniać kilka przeszukiwanych map bitowych. Rozwiązania takie są obecnie często stosowane w hurtowniach danych. Zadanie 4 Decydujemy się na dodanie tabeli TrenerZawodnik, w której gromadzimy dane, kto kogo trenuje. Encję Zawodnik rozbijamy na dwie tabele, Zawodnik oraz Wystep, w ten sposob gwarantując postać BCNF. Oczywiście nie powoduje to utraty zależności. CREATE TABLE Reprezentacja ( idreprezentacji INTEGER PRIMARY KEY, kraj VARCHAR(30) NOT NULL CREATE TABLE Druzyna ( iddruzyny INTEGER PRIMARY KEY, idreprezentacji INTEGER NOT NULL, dyscyplina VARCHAR(30) NOT NULL CREATE TABLE Trener ( idtrenera INTEGER PRIMARY KEY, idreprezentacji INTEGER NOT NULL, iddruzyny INTEGER, nazwisko VARCHAR(30) NOT NULL CREATE TABLE Zawodnik ( idzawodnika INTEGER PRIMARY KEY, dyscyplina VARCHAR(30) NOT NULL, iddruzyny INTEGER

CREATE TABLE TrenerZawodnik ( idzawodnika INTEGER, idtrenera INTEGER, PRIMARY KEY (idzawodnika,idtrenera) CREATE TABLE Wystep ( idwystepu INTEGER PRIMARY KEY, idzawodnika INTEGER NOT NULL, godzina DATE, UNIQUE (idzawodnika,godzina) Do przyjęcia jest wydzielenie związku (Druzyna, Zawodnik) jako oddzielnej tabeli; podobnie wprowadzenie dwóch podtypów zawodników (drużynowych i niedrużynowych).