--- tags: BD, lista 2 --- # Bazy Danych lista2 ## ZADANIA 5/6 : <span style="color:green">1</span>, <span style="color:green">2</span>, <span style="color:green">3</span>, <span style="color:green">4</span>, <span style="color:green">5</span>, 6 **Zadanie 1** Rozważmy relację R(A, B, C). Napisz zapytanie algebry relacji oraz zapytanie rrd/rrk, które zwróci pusty wynik wtedy i tylko wtedy gdy para atrybutów A, B jest kluczem relacji R. :rocket: * **Klucz relacji**: Podzbiór atrybutów relacji, których wartosci zawsze pozwalają jednoznacznie zidentyfikować krotkę relacji * Wypisać te krotki, które są przykładem na to, że para A, B nie jest kluczem relacji, czyli krotki o tych samych wartościach w kolumnie A i B a różnych wartościach w kolumnie C. Jeśli A,B są kluczem -> zapytanie zwróci pusty wynik. Jeśli zapytanie zwróci pusty wynik -> można jednoznacznie zidetyfikować każdą krotkę po parze <a,b>. * zapytanie algebry relacji: * ``` σ R.A=R2.A ∧ R.B=R2.B ∧ R.C≠R2.C (R ⨯ ρ R2 (R)) ``` * zapytanie rrd/rrk: * ``` { x | x ∈ R ∧ (∃y)(y ∈ R ∧ x.A=y.A ∧ x.B=y.B ∧ x.C≠y.C } ``` **Zadanie 2** Rozważmy relacje R(A, B, C) oraz S(X, Z), przy czym atrybut A jest kluczem w R. Napisz zapytanie algebry relacji oraz zapytanie rrk/rrd, które zwróci pusty wynik wtedy i tylko wtedy gdy atrybut Z relacji S jest kluczem obcym wskazującym na atrybut A relacji R. :rocket: * **Klucz obcy**: służy do połączenia danych z różnych relacji. * Gdy każdy z kluczy w relacji S w kolumnie Z występuje w kolumnnie A relacji R, wtedy Z jest kluczem obcym dla R. ``` pi Z S ∩ R.A = pi Z S``` * Wypisać te krotki S, których wartość w kolumnie Z nie wsytępuje w R w kolumnie A. * zapytanie algebry relacji: * ``` S - (π X, Y (S ⨝ R S.Z=R.A)) ``` * zapytanie rrd/rrk: * ``` { x | x ∈ S ∧ (∀y)(y ∈ R ∧ x.Z≠y.A } ``` **Zadanie 3** Dane są relacje *R*, *S* i *T* o schematach *R = AB* , *S = B1B2* i *T = BC*. Przeanalizuj znaczenie poniższych zapytań i postaraj się znależć naturalną interpretację dla relacji zapytań w języku polskim. Zastanów się, czy są to formuły niezależne od dziedziny. Zapisz równoważne im formuły w algebrze relacji zawsze jeżli to możliwe. :rocket: 1. ```{a | (∃b)(R(a, b) ∧ ¬((∃a')a' > a ∧ (∃b')(R(a', b'))) )}``` - maksymalna wartość z kolumny A tabeli R. * **Dziedzinowo niezależne**, do ustalenia wyniku dla zapytania wystarczy znać *R*. * ``` R - π R.A (σ R.A < R2.A (R ⨯ ρ R2 (R))) ``` - elementy z *R.A*, takie że w *.A* nie ma elementów większych od nich (czyli elment maksymalny) 3. ```{a, b | (∀c)(T (c, a) ∨ T (c, b) ∨ (∀d)(¬T (c, d)))}``` - <!-- zbiór par *a*, *b* gdzie *a* należy do dziedziny *T.B*, *b* należy do dziedziny *T.C*. --> CZY NAPEWNO ?? *a*, *b* <- jedyne 2 wartości występujące w kolumnie *C* tabeli *T*. * (Dziedzinowo **zależne**), nie ma równoważnej formuły w algebrze relacji, gdy dziedziną drugiej kolumny *T* jest zbiór nieskończony a w tabeli *T* występuję tylko jeden wpis odpowiedzią zapytanie może być każda para typu *<a,b>* gdzie *a* występuje w tabeli a *b* dowolne z dziedziny **Zadanie 4** :rocket: 1. Podaj dane aktorów (pseudonim, imię, nazwisko, rok urodzenia, narodowość), którzy pojawili się w filmach produkowanych tylko w jednym roku. * ``` { a | a ∈ A ∧ (∀ f1,f2)(f1∈F ∧ f2∈F (∃ r1,r2)(r1∈R i r2∈R i r1.idf=f1.idf i r2.idf=f2.idf i r1.pseudo=a.pseudo i r2.pseudo=a.pseudo) ⇒ f1.rokProd=f2.rokProd)) } ``` * każde dwa filmy, w których wystapił dany aktor muszą mieć ten sam rok produkcji 3. Podaj pełne krotki filmów, które są najnowszymi filmami reżyserów. * ``` {f | f∈F ∧ (∀ f')((f'∈F ∧ f'.rezyser=f.rezyser) ⇒ f.rokProd>f'.rokProd)}``` * zbiór filmów, t. że każdy inny film tego samego reżysera był wyprodukowany wcześniej 5. Dla każdego filmu znajdź aktora, który dostał najwyższą gażę w tym filmie (został najlepiej opłacony z obsady filmu). W relacji wynikowej podaj pseudonim aktora, idf oraz gażę. * ```{ a.pseudo, r.idf, r.gaza | a∈A ∧ r∈R ∧ a.pseudo=r.pseudo ∧ (∃f)(f∈F ∧ f.idf=r.idf ∧ (∀r')((r'∈R ∧ r.idf=f.idf) ⇒ r'.gaza <= r.gaza))} ``` * aktor *a*, który zagrał rolę *r* - najlepiej opłacalną role ze wszystkich ról w tym filmie 6. Podaj pełne krotki aktorów, którzy nigdy nie obniżyli swojej minimalnej gaży (w późniejszych latach mogła ona najwyżej rosnąć). Na wynik nie wpływają lata, w których aktor nie podał minimalnej gaży. * ``` { a | (∀ m1,m2)((m1∈M, m2∈M ∧ m1.pseudo=a.pseudo ∧ m2.pseudo=a.pseudo ∧ m1.rok<m2.rok) ⇒ m1.minGaza<m2.minGaza) }``` **Zadanie 5** :rocket: Niech D, dziedzina Zarobki = {0,1}: * Imię|Zarobki * Jan |&nbsp; x Niech Q: * sigma Zarobki=0 D Wtedy możliwe relacje w wyniku Qd = D lub Qd = pusta relacja. W każdym z przypadków równość rep(Qd) = Q(rep(D)) nie zachodzi. ## MATERIAŁY * kalkulator algebry relacji: https://dbis-uibk.github.io/relax/help#relalg-reference