musterloesung-db-2012-09-24.tex 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196
  1. \documentclass[a4paper,9pt]{scrartcl}
  2. \usepackage{amssymb, amsmath} % needed for math
  3. \usepackage[utf8]{inputenc} % this is needed for umlauts
  4. \usepackage[ngerman]{babel} % this is needed for umlauts
  5. \usepackage[T1]{fontenc} % this is needed for correct output of umlauts in pdf
  6. \usepackage{pdfpages} % Signatureinbingung und includepdf
  7. \usepackage{geometry} % [margin=2.5cm]layout
  8. \usepackage{hyperref} % links im text
  9. \usepackage{color}
  10. \usepackage{framed}
  11. \usepackage{enumerate} % for advanced numbering of lists
  12. \usepackage{marvosym} % checkedbox
  13. \usepackage{wasysym}
  14. \usepackage{braket} % for \Set{}
  15. \usepackage{pifont}% http://ctan.org/pkg/pifont
  16. \usepackage{minted} % needed for the inclusion of source code
  17. \usepackage{tikz}
  18. \usetikzlibrary{arrows,positioning, calc,lindenmayersystems,decorations.pathmorphing,intersections}
  19. \tikzstyle{vertex}=[draw,
  20. fill=yellow,
  21. circle,minimum size=10pt,inner sep=0pt]
  22. \newcommand{\cmark}{\ding{51}}%
  23. \newcommand{\xmark}{\ding{55}}%
  24. \hypersetup{
  25. pdfauthor = {Martin Thoma},
  26. pdfkeywords = {Datenbanksysteme,KIT},
  27. pdftitle = {Musterlösung: Datenbanksysteme}
  28. }
  29. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  30. % Begin document %
  31. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  32. \begin{document}
  33. \section{Aufgabe 1 - Funktionale Abhängigkeiten}
  34. \subsection{Teilaufgabe a)}
  35. Gilt $F \Rightarrow f$?
  36. \begin{tabular}{clccl}
  37. & Funktionale Abhängigkeit $f$ & & Begründung\\
  38. \hline\hline
  39. 1 & $DI \rightarrow BCDEFI$ & \xmark & kein F\\
  40. 2 & $BDG \rightarrow ABCDEFHH$ & \cmark &\\
  41. 3 & $DHI \rightarrow ACDGI$ & \xmark & kein A\\
  42. 4 & $BCDEGI \rightarrow ABCDEFGHI$ & \cmark &\\
  43. 5 & $AF \rightarrow ABCEGH$ & \cmark &\\
  44. 6 & $ABCDE \rightarrow ABCEFHI$ & \xmark & kein I\\
  45. 7 & $DI \rightarrow CFGI$ & \xmark & kein C\\
  46. 8 & $ADFI \rightarrow BCDEFGHI$ & \cmark &\\
  47. 9 & $GI \rightarrow BDEFG$ & \xmark & kein B\\
  48. \end{tabular}
  49. \subsection{Teilaufgabe b)}
  50. Schlüssel in R:
  51. \begin{itemize}
  52. \item $\Set{I, A}$
  53. \item $\Set{I, B}$
  54. \item $\Set{I, C}$
  55. \end{itemize}
  56. Die Relation befindet sich nur in 1NF, da $I \rightarrow H$ eine
  57. partielle Abhängigkeit darstellt. Daher kann die Relation nicht in
  58. 2NF sein.
  59. \subsection{Teilaufgabe c)}
  60. \begin{align*}
  61. F^{(2)} = \{ & A \rightarrow B,\\
  62. &AI \rightarrow \delta,\\
  63. & B \rightarrow C, B \rightarrow D,\\
  64. & C \rightarrow A,C \rightarrow D,C \rightarrow F,\\
  65. & D \rightarrow E,D \rightarrow F,D \rightarrow G,D \rightarrow H,D \rightarrow H,\\
  66. & F \rightarrow G,\\
  67. & I \rightarrow H
  68. \}
  69. \end{align*}
  70. \begin{align*}
  71. F^{(3)} = \{ & A \rightarrow B,\\
  72. &AI \rightarrow \delta,\\
  73. & B \rightarrow C, B \rightarrow D,\\
  74. & C \rightarrow A,\\
  75. & D \rightarrow E,D \rightarrow F,D \rightarrow H,\\
  76. & F \rightarrow G,\\
  77. & I \rightarrow H
  78. \}
  79. \end{align*}
  80. aufgelöst wurden wie folgt:
  81. \begin{tabular}{l|l}
  82. & redundant durch\\
  83. \hline
  84. $C \rightarrow D$ & $C \rightarrow A \land A \rightarrow B \land B \rightarrow D$\\
  85. $C \rightarrow F$ & $C \rightarrow A \land A \rightarrow B \land B \rightarrow D \land D \rightarrow F$\\
  86. $D \rightarrow G$ & $D \rightarrow F \land F \rightarrow G$\\
  87. \end{tabular}
  88. ergibt die Zerlegung
  89. \begin{align*}
  90. R = \{\\
  91. & (\Set{A, B, C, D}, \Set{\Set{A}, \Set{B}, \Set{C}}),\\
  92. &(\Set{A, I}, \Set{\Set{A, I}}),\\
  93. & (\Set{D, E, F, H},\Set{\Set{D}}),\\
  94. & (\Set{F, G}, \Set{\Set{F}}),\\
  95. & (\Set{I, H}, \Set{\Set{I}})\\
  96. \}
  97. \end{align*}
  98. \clearpage
  99. \section{Aufgabe 2 - SQL}
  100. \subsection{Teilaufgabe a)}
  101. \begin{tikzpicture} [scale=1.2]
  102. \node (a)[vertex] at (1,2) {1};
  103. \node (b)[vertex] at (2,2) {2};
  104. \node (c)[vertex] at (3,1) {3};
  105. \node (d)[vertex] at (2,0) {4};
  106. \node (e)[vertex] at (1,0) {5};
  107. \node (f)[vertex] at (0,1) {6};
  108. \foreach \from/\to in {a/b,a/c,a/d,b/c,b/d,c/d,d/e,e/f}
  109. \draw[line width=1.5pt] (\from) -- (\to);
  110. \end{tikzpicture}
  111. \subsection{Teilaufgabe b)}
  112. \inputminted[linenos, numbersep=5pt, tabsize=4]{sql}{d2b.sql}
  113. \subsection{Teilaufgabe c)}
  114. \subsubsection{Version A}
  115. \inputminted[linenos, numbersep=5pt, tabsize=4]{sql}{d2c1.sql}
  116. \paragraph{Weitere Erklärungen:}
  117. Ansatz:
  118. \begin{enumerate}
  119. \item Suche alle Personenpaare, die beide <id> als Freund haben (wobei
  120. nur ungleiche paare gesucht sind, da man nicht mit sich selbst befreundet
  121. sein kann)
  122. \item Prüfe über die Menge dieser Paare, welche noch nicht befreundet sind
  123. \end{enumerate}
  124. Ein LEFT JOIN ergänzen, um zu ermitteln, welche Paare nicht tatsächlich
  125. in FriendshipSymmetric stehen (diese werden NULL joinen). Daher nach NULL
  126. selektieren
  127. Beispielhaftes Ergebnis für gegebene Situation und id=4:
  128. \begin{verbatim}
  129. "1","5"
  130. "2","5"
  131. "3","5"
  132. "5","1"
  133. "5","2"
  134. "5","3"
  135. \end{verbatim}
  136. \subsubsection{Version B}
  137. \inputminted[linenos, numbersep=5pt, tabsize=4]{sql}{d2c2.sql}
  138. Ohne EXCEPT (da ich mir nicht sicher bin, ob es nun SQL-Standard
  139. ist oder nicht, z.B. SQLite kenn kein EXCEPT, auf einer Übersicht
  140. stand es aber bei SQL89 angehakt dabei).
  141. Hinweis: NOT EXISTS ist True, gdw die Unterabfrage genau 0
  142. Zeilen enthält.
  143. \inputminted[linenos, numbersep=5pt, tabsize=4]{sql}{d2c2.1.sql}
  144. \section{Aufgabe 3 - Histories}
  145. \subsubsection{Teilaufgabe a)}
  146. \begin{itemize}
  147. \item[H1] Es gibt folgende Kanten:
  148. (12, xyz), (13, xy), (23, y), (32, y).\\
  149. Somit ist ein Zykel zwischen 2 und 3 $\Rightarrow$ nicht serialisierbar
  150. \item[H2] (21, xyz), (23, y), (31, xy).\\
  151. Somit keine Zykel und serialisierbar
  152. \end{itemize}
  153. \subsubsection{Teilaufgabe b) und c)}
  154. (Y = erfüllt, N = nicht erfüllt)
  155. \begin{itemize}
  156. \item[H1]
  157. \begin{itemize}
  158. \item T3 reads y from T2 NN
  159. \item T2 reads x from T3 YN
  160. \item T2 reads z from T1 YN
  161. \item T3 reads x from T1 YN
  162. \end{itemize}
  163. \item[H2]
  164. \begin{itemize}
  165. \item T1 reads y from T3 YN
  166. \item H1 ist nicht rücksetzbar (also weder in RC, ACA oder ST)
  167. \item H2 ist in RC (also nicht in ACA oder ST)
  168. \end{itemize}
  169. \end{itemize}
  170. \end{document}