Martin Thoma %!s(int64=12) %!d(string=hai) anos
pai
achega
fe6543ad0b

+ 7 - 0
documents/musterloesung-db-2012-09-24/Makefile

@@ -0,0 +1,7 @@
+SOURCE = musterloesung-db-2012-09-24
+make:
+	pdflatex -shell-escape $(SOURCE).tex -output-format=pdf
+	make clean
+
+clean:
+	rm -rf  $(TARGET) *.class *.html *.log *.aux *.out *.pyg

+ 1 - 0
documents/musterloesung-db-2012-09-24/Readme.md

@@ -0,0 +1 @@
+Auf Basis von [Nilans und Stephans pastebin](http://pastebin.com/JfDfrVMV) entstanden.

+ 11 - 0
documents/musterloesung-db-2012-09-24/d2b.sql

@@ -0,0 +1,11 @@
+CREATE VIEW FriendshipSymmetric AS (
+    (
+        SELECT person1, person2 
+        FROM Friendship
+    )
+    UNION
+    (
+        SELECT person2 AS person1, person1 AS person2 
+        FROM Friendship
+    )
+)

+ 10 - 0
documents/musterloesung-db-2012-09-24/d2c1.sql

@@ -0,0 +1,10 @@
+SELECT f1.person2, f2.person2 
+FROM FriendshipSymmetric f1
+JOIN FriendshipSymmetric f2 
+    ON f1.person1 = f2.person1
+LEFT JOIN FriendshipSymmetric f3 
+    ON f1.person2 = f3.person1 AND f2.person2 = f3.person2
+WHERE f1.person2 != f2.person2
+    AND f1.person1 = <id>
+    AND p3.person1 IS NULL 
+    AND p3.person2 IS NULL

+ 12 - 0
documents/musterloesung-db-2012-09-24/d2c2.sql

@@ -0,0 +1,12 @@
+SELECT f1.person2, f2.person2 
+FROM (
+    SELECT person2 FROM FriendshipSymmetric WHERE person1 = <id>
+) f1
+JOIN ON
+(
+    SELECT personni FROM FriendshipSymmetric WHERE person1 = <id>
+) f2
+EXCEPT
+(
+    SELECT * FROM FriendshipSymmetric
+)

BIN=BIN
documents/musterloesung-db-2012-09-24/musterloesung-db-2012-09-24.pdf


+ 165 - 0
documents/musterloesung-db-2012-09-24/musterloesung-db-2012-09-24.tex

@@ -0,0 +1,165 @@
+\documentclass[a4paper,9pt]{scrartcl}
+\usepackage{amssymb, amsmath} % needed for math
+\usepackage[utf8]{inputenc} % this is needed for umlauts
+\usepackage[ngerman]{babel} % this is needed for umlauts
+\usepackage[T1]{fontenc}    % this is needed for correct output of umlauts in pdf
+\usepackage{pdfpages}       % Signatureinbingung und includepdf
+\usepackage{geometry}       % [margin=2.5cm]layout
+\usepackage{hyperref}       % links im text
+\usepackage{color}
+\usepackage{framed}
+\usepackage{enumerate}      % for advanced numbering of lists
+\usepackage{marvosym}       % checkedbox
+\usepackage{wasysym}
+\usepackage{braket}         % for \Set{}
+\usepackage{pifont}% http://ctan.org/pkg/pifont
+\usepackage{minted} % needed for the inclusion of source code
+\usepackage{tikz}
+\usetikzlibrary{arrows,positioning, calc,lindenmayersystems,decorations.pathmorphing,intersections} 
+\tikzstyle{vertex}=[draw,
+fill=yellow,
+circle,minimum size=10pt,inner sep=0pt]
+
+\newcommand{\cmark}{\ding{51}}%
+\newcommand{\xmark}{\ding{55}}%
+
+\hypersetup{ 
+  pdfauthor   = {Martin Thoma}, 
+  pdfkeywords = {Datenbanksysteme,KIT}, 
+  pdftitle    = {Musterlösung: Datenbanksysteme} 
+} 
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Begin document                                                    %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\begin{document}
+\section{Aufgabe 1 - Funktionale Abhängigkeiten}
+\subsection{Teilaufgabe a)}
+  Gilt $F \Rightarrow f$?
+
+  \begin{tabular}{clccl}
+    & Funktionale Abhängigkeit $f$ &  & Begründung\\
+    \hline\hline
+    1 & $DI \rightarrow BCDEFI$         & \xmark &   kein F\\
+    2 & $BDG \rightarrow ABCDEFHH$      & \cmark &\\
+    3 & $DHI \rightarrow ACDGI$         & \xmark &   kein A\\
+    4 & $BCDEGI \rightarrow ABCDEFGHI$  & \cmark &\\
+    5 & $AF \rightarrow ABCEGH$         & \cmark &\\
+    6 & $ABCDE \rightarrow ABCEFHI$     & \xmark &   kein I\\
+    7 & $DI \rightarrow CFGI$           & \xmark &   kein C\\
+    8 & $ADFI \rightarrow BCDEFGHI$     & \cmark &\\
+    9 & $GI \rightarrow BDEFG$          & \xmark &   kein B\\
+  \end{tabular}
+
+\subsection{Teilaufgabe b)}
+Schlüssel in R:
+\begin{itemize}
+    \item $\Set{I, A}$
+    \item $\Set{I, B}$
+    \item $\Set{I, C}$
+\end{itemize}
+
+Die Relation befindet sich nur in 1NF, da $I \rightarrow H$ eine 
+partielle Abhängigkeit darstellt. Daher kann die Relation nicht in
+2NF sein.
+
+\subsection{Teilaufgabe c)}
+\begin{align*}
+F^{(2)} = \{  & A \rightarrow B,\\
+    &AI \rightarrow \delta,\\
+    & B \rightarrow C, B \rightarrow D,\\
+    & C \rightarrow A,C \rightarrow D,C \rightarrow F,\\
+    & D \rightarrow E,D \rightarrow F,D \rightarrow G,D \rightarrow H,D \rightarrow H,\\
+    & F \rightarrow G,\\
+    & I \rightarrow H 
+\}
+\end{align*}
+
+\begin{align*}
+F^{(3)} = \{  & A \rightarrow B,\\
+    &AI \rightarrow \delta,\\
+    & B \rightarrow C, B \rightarrow D,\\
+    & C \rightarrow A,\\
+    & D \rightarrow E,D \rightarrow F,D \rightarrow G,D \rightarrow H,\\
+    & F \rightarrow G,\\
+    & I \rightarrow H 
+\}
+\end{align*}
+
+aufgelöst wurden wie folgt:
+
+  \begin{tabular}{l|l}
+             & redundant durch\\
+    \hline
+    $C \rightarrow D$ & $C \rightarrow A \land A \rightarrow B \land B \rightarrow D$\\
+    $C \rightarrow F$ & $C \rightarrow A \land A \rightarrow B \land B \rightarrow D \land D \rightarrow F$\\
+    $D \rightarrow G$ & $D \rightarrow F \land F \rightarrow G$\\
+  \end{tabular}
+
+ergibt die Zerlegung 
+
+\begin{align*}
+    R = \{\\
+            & (\Set{A, B}, \Set{\Set{A}}),\\
+            &(\Set{A, I}, \Set{\Set{A, I}}),\\
+            & (\Set{B, C, D}, \Set{\Set{B}}),\\
+            & (\Set{C, A}, \Set{\Set{C}}),\\
+            & (\Set{D, E, F, H},\Set{\Set{D}}),\\
+            & (\Set{F, G}, \Set{\Set{F}}),\\
+            & (\Set{I, H}, \Set{\Set{I}})\\
+        \}
+\end{align*}
+\clearpage
+
+\section{Aufgabe 2 - SQL}
+\subsection{Teilaufgabe a)}
+\begin{tikzpicture}  [scale=1.2]
+  \node (a)[vertex] at (1,2) {1};
+  \node (b)[vertex] at (2,2) {2};
+  \node (c)[vertex] at (3,1) {3};
+  \node (d)[vertex] at (2,0) {4};
+  \node (e)[vertex] at (1,0) {5};
+  \node (f)[vertex] at (0,1) {6};
+
+  \foreach \from/\to in {a/b,a/c,a/d,b/c,b/d,c/d,d/e,e/f}
+    \draw[line width=1.5pt] (\from) -- (\to);
+\end{tikzpicture}
+
+\subsection{Teilaufgabe b)}
+\inputminted[linenos, numbersep=5pt, tabsize=4]{sql}{d2b.sql}
+
+\subsection{Teilaufgabe c)}
+\subsubsection{Version A}
+\inputminted[linenos, numbersep=5pt, tabsize=4]{sql}{d2c1.sql}
+ 
+\subsubsection{Version B}
+\inputminted[linenos, numbersep=5pt, tabsize=4]{sql}{d2c2.sql}
+
+\section{Aufgabe 3 - Histories}
+\subsubsection{Teilaufgabe a)}
+\begin{itemize}
+\item[H1] Es gibt folgende Kanten:
+    (12, xyz), (13, xy), (23, y), (32, y).\\
+    Somit ist ein Zykel zwischen 2 und 3 $\Rightarrow$ nicht serialisierbar
+\item[H2] (21, xyz), (23, y), (31, xy).\\
+    Somit keine Zykel und serialisierbar
+\end{itemize}
+
+\subsubsection{Teilaufgabe b) und c)}
+(Y = erfüllt, N = nicht erfüllt)
+\begin{itemize}
+\item[H1]
+    \begin{itemize}
+        \item T3 reads y from T2 NN
+        \item T2 reads x from T3 YN
+        \item T2 reads z from T1 YN
+        \item T3 reads x from T1 YN
+    \end{itemize}
+\item[H2]
+    \begin{itemize}
+        \item T1 reads y from T3 YN
+        \item H1 ist nicht rücksetzbar (also weder in RC, ACA oder ST)
+        \item H2 ist in RC (also nicht in ACA oder ST)
+    \end{itemize}
+\end{itemize}
+\end{document}

+ 7 - 0
documents/musterloesung-db-klausur-a/Makefile

@@ -0,0 +1,7 @@
+SOURCE = musterloesung-db-klausur-a
+make:
+	pdflatex -shell-escape $(SOURCE).tex -output-format=pdf
+	make clean
+
+clean:
+	rm -rf  $(TARGET) *.class *.html *.log *.aux *.out *.pyg

+ 6 - 0
documents/musterloesung-db-klausur-a/d3a.sql

@@ -0,0 +1,6 @@
+CREATE VIEW GoalsPerPlayer AS (
+    SELECT player_id, name, team, SUM(goals) AS sum_goals
+        FROM Player
+        JOIN Participation ON Participation.player_id = Player.player_id
+        GROUP BY player_id 
+)

+ 10 - 0
documents/musterloesung-db-klausur-a/d3b.sql

@@ -0,0 +1,10 @@
+CREATE VIEW AlwaysParticipating AS (
+    SELECT player_id, name
+    FROM Player
+    JOIN Participation ON Player.player_id = Participation.player_id
+    HAVING SUM(Participation.cup_id) =
+        (
+            SELECT SUM(cup_id)
+            FROM cup_id
+        )
+)

BIN=BIN
documents/musterloesung-db-klausur-a/musterloesung-db-klausur-a.pdf


+ 86 - 0
documents/musterloesung-db-klausur-a/musterloesung-db-klausur-a.tex

@@ -0,0 +1,86 @@
+\documentclass[a4paper,9pt]{scrartcl}
+\usepackage{amssymb, amsmath} % needed for math
+\usepackage[utf8]{inputenc} % this is needed for umlauts
+\usepackage[ngerman]{babel} % this is needed for umlauts
+\usepackage[T1]{fontenc}    % this is needed for correct output of umlauts in pdf
+\usepackage{pdfpages}       % Signatureinbingung und includepdf
+\usepackage{geometry}       % [margin=2.5cm]layout
+\usepackage{hyperref}       % links im text
+\usepackage{color}
+\usepackage{framed}
+\usepackage{enumerate}      % for advanced numbering of lists
+\usepackage{marvosym}       % checkedbox
+\usepackage{wasysym}
+\usepackage{braket}         % for \Set{}
+\usepackage{pifont}% http://ctan.org/pkg/pifont
+\usepackage{minted} % needed for the inclusion of source code
+
+\newcommand{\cmark}{\ding{51}}%
+\newcommand{\xmark}{\ding{55}}%
+
+\hypersetup{ 
+  pdfauthor   = {Martin Thoma}, 
+  pdfkeywords = {Datenbanksysteme,KIT}, 
+  pdftitle    = {Musterlösung: Datenbanksysteme} 
+} 
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Begin document                                                    %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\begin{document}
+\section{Aufgabe D1 - Multiple Choice}
+  \begin{tabular}{p{12cm}cc}
+    & Richtig & Falsch\\
+    Die Komplexität des Nested-Loop Joins ist stets höher als die des Merge-Joins. & \Square & \Square\\
+    Wenn die Daten vorab in sinnvoller Weise sortiert wurden, kann dies die Ausführung des Nested Loops beschleunigen. & \Square & \Square\\
+    Die Berechnung der Intervall-Grenzen ist beim Equi-Depth Histogramm aufwendiger als beim Equi-Width Histogramm. & \Square & \Square\\
+    Eine zustandsbehaftete Ausführung hat die Eigenschaft, dass der Zustand explizit erfasst und in einer Datenbank gespeicher wird. & \Square & \Checkedbox\\
+    Beim asynchronen Zugriff wird die Kontrolle an den Aufrufer zurückgegeben, sobald die letzte Kopie des Datenobjekts geschrieben wurde. & \Square & \Square\\
+    Eine sinnvolle Möglichkeit der Auflösung von Inkonsistenzen von mehreren Versionen des Einkaufswagens ist, ihre Schnittmenge zu berechnen. & \Square & \Square\\
+    Der Kommunikationsaufwand in strukturierten P2P-Systememn ... & \Square & \Square\\
+    Vector Clocks sind Listen ... & \Square & \Square\\
+    PIQL ... & \Square & \Square\\
+    PIQL ... & \Square & \Square\\
+    Im PIQL ... & \Square & \Square\\
+    Der DataStop-Operator ... & \Square & \Square\\
+  \end{tabular}
+
+\section{Aufgabe D2 - Normalformen}
+\subsection{Teilaufgabe a)}
+$\Set{D, B}$ und $\Set{D, C}$
+
+\subsection{Teilaufgabe b)}
+\begin{itemize}
+    \item $D^+ = \Set{A, D, E, F, G}$
+    \item $B^+ = C^+ = \Set{A, B, C, E, F, G}$
+\end{itemize}
+
+TODO: Was kann ich daraus auf die NF folgern?
+
+\subsection{Teilaufgabe c)}
+TODO
+\clearpage
+
+\section{D3 - SQL}
+\subsection{Teilaufgabe a)}
+\inputminted[linenos, numbersep=5pt, tabsize=4]{sql}{d3a.sql}
+
+\subsection{Teilaufgabe b)}
+\inputminted[linenos, numbersep=5pt, tabsize=4]{sql}{d3b.sql}
+
+TODO: Geht das schöner?
+
+\subsection{Teilaufgabe c)}
+TODO: Keine Ahnung, was das soll. Das WHERE verwirrt mich. Werden hier
+nur Teams angeschaut, die weniger Punkte haben also alle Spieler ohne 
+Mannschaft zusammen?
+
+\section{D4 - Transaktionen und Histories}
+TODO: Transaktionen
+\subsection{Teilaufgabe a)}
+TODO: Serialisierbarkeitsgraph
+
+\subsection{Teilaufgabe b)}
+TODO: Serialisierbarkeitsgraph
+
+\end{document}

BIN=BIN
documents/musterloesung-db-klausur-b/musterloesung-db-klausur-b.pdf