# BD 09.03.2021
## Zadanie 1
#### Maurycy Borkowski
Nie da się. Zauważmy, że wszystkie operatory są monotonicznie niemalejące tzn. dla niemniejszego (w sensie liczności rekordów) argumentu zwrócą niemniejszą relacje:
Niech $R, S$ dowolne relacje tż. $R \subseteq S$ wtedy:
$\sigma_{F}(R) \subseteq \sigma_{F}(S)$
$\Pi_{l}(R) \subseteq \Pi_{l}(S)$
$R \times X \subseteq S \times X$
$R \cup X \subseteq S \cup X$
$R - X \subseteq S - X$
ale (ponieważ po lewej potencjalnie większy zbiór)
$X - R \subsetneq X - S$
Zatem nigdy nie uda nam się z kombinacji operatorów monotonicznie niemalejących uzyskać operatora, który zwróci mniejszą relacje dla większego argumentu.
**Intuicyjnie**
Tylko $\sigma_F$ zmniejszy nam liczbę rekordów relacji, ale nie da się za pomocą skończonej liczby warunków w $F$ zapisać różnicy, która by *działała* dla **dowolnych** $R, S$
## Zadanie 2
#### Jakub Kaczmarek
Przykładowy przebieg kwerendy:
$X,Y,Z$:
| | $X$ | $Y$ | $Z$ |
| - | - | - | - |
| A | 1, 2, 6 | 1, 3 | 2, 4|
$A=X \times \rho_{Y(A_Y)}(Y) \times \rho_{Z(A_Z)}(Z)$:
| $X.A$|$Y.A_Y$|$Z.A_Z$|
| - | - | - |
| 1 | 1 | 2 |
| 1 | 1 | 4 |
| 1 | 3 | 2 |
| 1 | 3 | 4 |
| 2 | 1 | 2 |
| 2 | 1 | 4 |
| 2 | 3 | 2 |
| 2 | 3 | 4 |
| 6 | 1 | 2 |
| 6 | 1 | 4 |
| 6 | 3 | 2 |
| 6 | 3 | 4 |
$B=\sigma_{X.A=Y.A_Y\lor X.A=Z.A_Z}(A)$:
| $X.A$|$Y.A_Y$|$Z.A_Z$|
| - | - | - |
| 1 | 1 | 2 |
| 1 | 1 | 4 |
| 2 | 1 | 2 |
| 2 | 3 | 2 |
$\pi_{X.A}(B)$:
| $X.A$|
| -|
| 1|
| 2|
Rozwiązanie jest niepoprawne ponieważ w przypadku gdy np $X=Y \land Z=\emptyset$ $X \times \rho_{Y(A_Y)}(Y) \times \rho_{Z(A_Z)}(Z)=\emptyset$ co jest sprzeczne z poprawnym wynikiem
#### Krzysztof Łyskawa
Zapytanie jest niepoprawne - jeśli jeden ze zbiorów $Y$ lub $Z$ będzie pusty, to cały iloczyn kartezjański będzie pusty.
Zauważmy, że $X \cap (Y \cup Z) \equiv X \backslash ((X \backslash Y) \cap (X \backslash Z))$ (dowód mogę przedstawić w formie rysunkowej)
$X \backslash (\pi_{A} (\sigma_{X.A=X1.A1} (\rho_{X(A)}(X \backslash Y) \times \rho_{X1(A_{1})} (X \backslash Z))))$ to właściwe zapytanie.
Alternatywnie:
$X \backslash (X \backslash Y \backslash Z)$
## Zadanie 3
A)
Maciej Zientara
$G_{count_{sok}(bar)}(\pi_{(bar,sok)}(B \Join P))$
zwraca nam liczbę soków podawaną w barach, do których ktoś chodzi
B) Łukasz Stasiak
$A=\pi_{osoba,sok,bar}(P \Join L)$
$B=G_{count_{sok}{(osoba,bar)}}(A)$
$C=\sigma_{n>=5}(B)$
więc zapytanie to:
$\pi_{osoba,bar}(C)$
C)
Krzysztof Wiśniewski
$\pi_{(osoba, sok, cena)} (G_{min_{cena}(osoba,sok)}(\pi_{(osoba, sok, cena)}(B \bowtie P)))$
Musimy złączyć B i P ponieważ chcemy mieć relację, która mówi nam, że w barze, w którym osoba bywa podają sok za cena, potem wystarczy wziąć z tej relacji kolumny osoba, sok i cena, a następnie dla tych samych soków i osób wziąć minimum z cena
D)
Martyna Firgolska
Zapytanie zwracające krotki (osoba, sok, bar) takie, że wśród wszystkich barów, w których bywa osoba *osoba* sok *sok* jest najtańszy w barze *bar*
$\pi_{sok, bar, osoba}((G_{min_{cena}(sok, osoba)}B\bowtie P)\bowtie P \bowtie B)$
## Zadanie 4
#### b)
$\pi_{first\_name, last\_name}$
$((\pi_{actor\_id, \, first\_name, \, last\_name} \, (\rho_{actor\_id \leftarrow id} \, actors))$ $\setminus$
$\pi_{actor\_id, \, first\_name, \, last\_name}$
$(\sigma_{df\_name=\texttt{'Quentin'} \, \land \, dl\_name=\texttt{'Tarantino'}}$
$((\rho_{actor\_id \leftarrow id} \, actors) \Join roles \Join$
$(\rho_{movie\_id \leftarrow id} \, movies) \Join movies\_directors \Join$
$(\rho_{director\_id \leftarrow id, \, df\_name \leftarrow first\_name, \,
dl\_name \leftarrow last\_name} \, directors))))$
#### c)
(πfirst_name, last_name actors)-(πfirst_name, last_name ( actors ⨝ actors.id= roles.actor_id
( (σ roles.actor_id = roles1.actor_id ∧ roles.movie_id ≠ roles1.movie_id
(roles ⨯ (ρ roles1 roles))))))