Lab 12

backback

Algebra relacji

Zakładamy jakiś schemat danych składający się z pewnych relacji.

Zadanie 1

Schemat bazy:

Napisz zapytania w FOL i w algebrze relacji:

  1. Wypisz nazwy i adresy kin wyświetlających filmy Bergmana
    φ(k,adr)=f,g,aktSeans(k,f,g)Film(f,’Bergman’,akt)Kino(k,adr) \varphi(k, adr) = \exists_{f, g, akt} \,Seans(k, f, g) \land Film(f, \texttt{'Bergman'}, akt) \land Kino(k, adr)
    π1,8σ1=7,2=4,5=’Bergman’(Seans×Film×Kino) \pi_{1, 8}\, \sigma_{1=7,2=4, 5=\texttt{'Bergman'}}\, (Seans \times Film \times Kino)
  2. Czy grają gdzieś Bergmana?
    φ=k,f,g,akt,adrSeans(k,f,g)Film(f,’Bergman’,akt)Kino(k,adr) \varphi = \exists_{k,f,g,akt, adr}\,Seans(k, f, g) \land Film(f, \texttt{'Bergman'}, akt) \land Kino(k, adr)
    π1σ5=’Bergman’(Seans×Film×Kino) \pi_1\,\sigma_{5=\texttt{'Bergman'}}\, (Seans \times Film \times Kino)
  3. Wypisz takie pary osób, że pierwsza reżyserowała drugą i odwrotnie.
    φ(r1,r2)=t1,t2Film(t1,r1,r2)Film(t2,r2,r1) \varphi(r_1, r_2) = \exists_{t_1, t_2}\,Film(t_1, r_1, r_2) \land Film(t_2, r_2, r_1)
    π2,3σ2=6σ3=5(Film×Film) \pi_{2, 3} \,\sigma_{2=6}\,\sigma_{3=5}\,(Film \times Film)
  4. Wypisz reżyserów, którzy grali w swoim filmie.
    φ(r)=fFilm(f,r,r) \varphi(r) = \exists_f\,Film(f, r, r)
    π2σ2=3Film \pi_{2}\,\sigma_{2=3}\,Film
  5. Wypisz krotkę (’Czas apokalipsy’,’Copolla’)(\texttt{'Czas apokalipsy'}, \texttt{'Copolla'}).
    φ(f,r)=(’Czas apokalipsy’,’Copolla’) \varphi(f, r) = (\texttt{'Czas apokalipsy'}, \texttt{'Copolla'})
    σ1=’Czas apokalipsy’σ2=’Copolla’{(f,r)} \sigma_{1=\texttt{'Czas apokalipsy'}} \sigma_{2 =\texttt{'Copolla'} } \{ (f, r) \}

Zadanie 2

Napisz wyrażenie algebry relacji wykorzystujące tylko selekcję, rzutowanie i produkt (SPC), które wylicza przecięcie dwóch relacji.

Rozwiązanie

π1,nσ1=n+1,2=n+2,,n=2n(R×S) \pi_{1, \ldots n}\,\sigma_{1=n+1,\,2=n+2,\,\ldots,\,n=2n} (R \times S)

Zadanie 3

Udowodnij, że różnicy dwóch relacji nie daje się wyliczyć wyrażeniem algebry relacji używającym jedynie selekcji, rzutowania, produktu i sumy (algebra SPCU).

Rozwiązanie

Możemy udowodnić nawet więcej: każdy z operatorów algebry relacji jest niezależny od pozostałych.

Lemat 1: Jedyne operacje zwiększające kardynalność wyniku to suma i produkt kartezjański.
Lemat 2: Jedyna operacja zmniejszająca arność krotek wynikowych to projekcja.
Lemat 3: Jedyna operacja zwiększająca arność krotek wynikowych to produkt kartezjański.
Lemat 4: Jedyne operacje pomniejszające kardynalność wyniku to selekcja i różnica, poza trywialnym przypadkiem R×R \times \emptyset.

Suma jest niezależna na mocy Lematu 1, bo tylko ona pozwala uzyskać większą kardynalność bez zmiany arności.
Projekcja jest niezależna na mocy Lematu 2.
Produkt kartezjański jest niezależny na mocy Lematu 3.

Różnica
Wszystkie operatory za wyjątkiem różnicy mają są monotoniczne, t.j. dodając krotki do źródłowych relacji możemy jedynie zwiększyć rozmiar wyniku.

Innymi słowy, jeśli mamy schemat z SS i TT oraz zapytanie algebry relacji EE składające się jedynie z operacji SPCU to
SSTT    E(S,T)E(S,T) S \subseteq S' \land T \subseteq T' \implies E(S, T) \subseteq E(S', T')
To oczywiście nie zachodzi dla różnicy: przy STS \setminus T możemy zmniejszyć wynik dodając krotki do TT.

Selekcja jest niezależna, bo tylko ona zmniejsza kardynalność wyniku jednocześnie będąc monotoniczna.

Zadanie 3.1

Zdefiniuj operator
Si1=j1,,ik=jkT={(a1,,an,b1,,bm)(a1,,an)S,(b1,,bm)T,ai1=bj1,,aik=bjk} S \bowtie_{i_1=j_1,\ldots,i_k=j_k} T = \{(a_1, \ldots, a_n, b_1, \ldots, b_m)\,|\,(a_1, \ldots, a_n) \in S, (b_1, \ldots, b_m) \in T, a_{i_1} = b_{j_1}, \ldots, a_{i_k} = b_{j_k}\}

Rozwiązanie

Si1=j1,,ik=jkT=σi1=n+j1,i2=n+j2,,ik=n+jk(S×T) S \bowtie_{i_1=j_1,\ldots,i_k=j_k} T = \sigma_{i_1=n+j_1,i_2=n+j_2,\ldots,i_k=n+j_k} (S \times T)

Zadanie 4

Mikrozadanie.
Napisz wyrażenie algebry relacji (selekcja, rzut, produkt, suma, różnica) wyliczające wynik operacji
R:S={t{t}×SR} R:S = \{t\,|\,\{t\} \times S \subseteq R\}

Zadanie 5

Udowodnij, że każde wyrażenie algebry SPC (tj. używające tylko operacji selekcji, rzutu i produktu) można równoważnie napisać w następującej postaci normalnej:
πk1,,knσθ(R1××Rm) \pi_{k_1, \ldots, k_n} \sigma_\theta (R_1 \times \ldots \times R_m)
gdzie θ\theta to zbiór równości między kolumnami oraz między kolumnami a stałymi.

Rozwiązanie

Rozpatrzmy drzewo zapytania, w którym każdy wierzchołek jest jednym z operatorów a dzieci to jego operandy. A więc wierzchołek produktu ma dwoje dzieci, selekcji jedno i projekcji też jedno.

Dowód przebiega przez indukcję po budowie drzewa. Wykazujemy, że możemy zmodyfikować drzewo tak, że selekcja nie ma w poddrzewie projekcji, a produkt ani selekcji ani projekcji.

Węzeł postaci (πi1,,inA)×B(\pi_{i_1, \ldots, i_n} A) \times B jest oczywiście równoważny πi1,,in(A×B)\pi_{i_1, \ldots, i_n} (A \times B). Podobnie A×(πi1,,inB)A \times (\pi_{i_1, \ldots, i_n} B) jest równoważne πi1+A,,in+A(A×B)\pi_{i_1 + |A|, \ldots, i_n + |A|} (A \times B).

Analogicznie dla (σtA)×B(\sigma_t A) \times B oraz A×(σtB)A \times (\sigma_t B).

Zrzuciliśmy wszystkie produkty poniżej selekcji i projekcji. Teraz łatwo zauważyć, że σj=k(πi1,,inA)\sigma_{j=k} (\pi_{i_1, \ldots, i_n} A) da się przerobić na projekcję selekcji AA. Wymaga to przenumerowania jj i kk tak, żeby odnosiło się do tych samych kolumn przed projekcją.

Zadanie 6

Udowodnij, że operator sumy nie daje się wyrazić wyrażeniem algebry SPC (czyli używającym tylko selekcji, rzutowania i produktu).

Rozwiązanie

Patrz Zadanie 3.

backback