diff --git a/documents/musterloesung-db-2012-09-24/Makefile b/documents/musterloesung-db-2012-09-24/Makefile new file mode 100644 index 0000000..e0af42f --- /dev/null +++ b/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 diff --git a/documents/musterloesung-db-2012-09-24/Readme.md b/documents/musterloesung-db-2012-09-24/Readme.md new file mode 100644 index 0000000..e821800 --- /dev/null +++ b/documents/musterloesung-db-2012-09-24/Readme.md @@ -0,0 +1 @@ +Auf Basis von [Nilans und Stephans pastebin](http://pastebin.com/JfDfrVMV) entstanden. diff --git a/documents/musterloesung-db-2012-09-24/d2b.sql b/documents/musterloesung-db-2012-09-24/d2b.sql new file mode 100644 index 0000000..23089d6 --- /dev/null +++ b/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 + ) +) diff --git a/documents/musterloesung-db-2012-09-24/d2c1.sql b/documents/musterloesung-db-2012-09-24/d2c1.sql new file mode 100644 index 0000000..b0bc916 --- /dev/null +++ b/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 = + AND p3.person1 IS NULL + AND p3.person2 IS NULL diff --git a/documents/musterloesung-db-2012-09-24/d2c2.sql b/documents/musterloesung-db-2012-09-24/d2c2.sql new file mode 100644 index 0000000..025f563 --- /dev/null +++ b/documents/musterloesung-db-2012-09-24/d2c2.sql @@ -0,0 +1,12 @@ +SELECT f1.person2, f2.person2 +FROM ( + SELECT person2 FROM FriendshipSymmetric WHERE person1 = +) f1 +JOIN ON +( + SELECT personni FROM FriendshipSymmetric WHERE person1 = +) f2 +EXCEPT +( + SELECT * FROM FriendshipSymmetric +) diff --git a/documents/musterloesung-db-2012-09-24/musterloesung-db-2012-09-24.pdf b/documents/musterloesung-db-2012-09-24/musterloesung-db-2012-09-24.pdf new file mode 100644 index 0000000..0dc704d Binary files /dev/null and b/documents/musterloesung-db-2012-09-24/musterloesung-db-2012-09-24.pdf differ diff --git a/documents/musterloesung-db-2012-09-24/musterloesung-db-2012-09-24.tex b/documents/musterloesung-db-2012-09-24/musterloesung-db-2012-09-24.tex new file mode 100644 index 0000000..20df78d --- /dev/null +++ b/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} diff --git a/documents/musterloesung-db-klausur-a/Makefile b/documents/musterloesung-db-klausur-a/Makefile new file mode 100644 index 0000000..35dca8e --- /dev/null +++ b/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 diff --git a/documents/musterloesung-db-klausur-a/d3a.sql b/documents/musterloesung-db-klausur-a/d3a.sql new file mode 100644 index 0000000..785baa0 --- /dev/null +++ b/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 +) diff --git a/documents/musterloesung-db-klausur-a/d3b.sql b/documents/musterloesung-db-klausur-a/d3b.sql new file mode 100644 index 0000000..f9e6a3d --- /dev/null +++ b/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 + ) +) diff --git a/documents/musterloesung-db-klausur-a/musterloesung-db-klausur-a.pdf b/documents/musterloesung-db-klausur-a/musterloesung-db-klausur-a.pdf new file mode 100644 index 0000000..db8d8c2 Binary files /dev/null and b/documents/musterloesung-db-klausur-a/musterloesung-db-klausur-a.pdf differ diff --git a/documents/musterloesung-db-klausur-a/musterloesung-db-klausur-a.tex b/documents/musterloesung-db-klausur-a/musterloesung-db-klausur-a.tex new file mode 100644 index 0000000..24c0b5b --- /dev/null +++ b/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} diff --git a/documents/musterloesung-db-klausur-b/musterloesung-db-klausur-b.pdf b/documents/musterloesung-db-klausur-b/musterloesung-db-klausur-b.pdf new file mode 100644 index 0000000..04cb924 Binary files /dev/null and b/documents/musterloesung-db-klausur-b/musterloesung-db-klausur-b.pdf differ