---
# System prepended metadata

title: Bazy Danych  lista2

---


---
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 


