Martin Thoma 12 年之前
父節點
當前提交
29d5c11e84

+ 4 - 3
documents/musterloesung-db-aufgabe-d1/Makefile

@@ -1,7 +1,8 @@
-SOURCE = mathe-vorlage
+SOURCE = musterloesung-db-klausur-b
 make:
-	pdflatex $(SOURCE).tex -output-format=pdf
+	pdflatex -shell-escape $(SOURCE).tex -output-format=pdf
+	pdfcrop --margins '5 10 20 30' d3.pdf d3.pdf
 	make clean
 
 clean:
-	rm -rf  $(TARGET) *.class *.html *.log *.aux *.out
+	rm -rf  $(TARGET) *.class *.html *.log *.aux *.out *.pyg

二進制
documents/musterloesung-db-aufgabe-d1/d3.dia


+ 11 - 0
documents/musterloesung-db-aufgabe-d1/d3b.sql

@@ -0,0 +1,11 @@
+CREATE TABLE Kunden2Berater (
+    id INTEGER,
+    kunden_id INTEGER,
+    berater_id INTEGER,
+    PRIMARY KEY (id),
+    FOREIGN KEY (berater_id) REFERENCES Berater (berater_id),
+    FOREIGN KEY (kunden_id) REFERENCES Kunden (kunden_id)
+);
+
+ALTER TABLE Kunden 
+    DROP COLUMN berater_id;

+ 3 - 0
documents/musterloesung-db-aufgabe-d1/d3c.sql

@@ -0,0 +1,3 @@
+SELECT name FROM Berater
+    JOIN Kunden ON Kunden.berater_id = Berater.berater_id 
+    WHERE Kunden.name = "Müller"

+ 6 - 0
documents/musterloesung-db-aufgabe-d1/d3d.sql

@@ -0,0 +1,6 @@
+CREATE VIEW Beratungsanzahl AS (
+    SELECT berater_id, count(DISTINCT Berater.berater_id) AS Anzahl
+    FROM Berater
+    FULL OUTER JOIN Kunden ON Berater.berater_id = Kunden.berater_id
+    GROUP BY berater_id
+)

+ 4 - 0
documents/musterloesung-db-aufgabe-d1/d3e.sql

@@ -0,0 +1,4 @@
+SELECT berater_id, name, anzahl
+    FROM Beratungsanzahl
+    JOIN Berater ON Berater.berater_id = Beratungsanzahl.berater_id
+    ORDER BY anzahl DESC

+ 0 - 36
documents/musterloesung-db-aufgabe-d1/mathe-vorlage.tex

@@ -1,36 +0,0 @@
-\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{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}
-
-\hypersetup{ 
-  pdfauthor   = {Martin Thoma}, 
-  pdfkeywords = {Datenbanksysteme,KIT}, 
-  pdftitle    = {Musterlösung: Datenbanksysteme} 
-} 
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-% Begin document                                                    %
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\begin{document}
-\section{Aufgabe D1 - ER-Modellierung}
-  \begin{tabular}{lcc}
-    & Richtig & Falsch\\
-    Es kann Gutachter geben, die keiner Konferenz zugewiesen sind & \Square & \Checkedbox\\
-    Es ist sichergestellt, dass eine Publikation von mehreren Gutachtern bewertet wird. & \Square & \Checkedbox\\
-    Jede Konferenz besitzt zugewiesene Gutachter & \Square & \Checkedbox\\
-    Jeder Autor steht über seine Publikationen mit mindestens drei Gutachtern in Verbindung. & \Square & \Checkedbox\\
-    Es kann auch Konferenzen geben, auf denen nichts veröffentlicht wird. & \Square & \Checkedbox\\
-    Es gilt immer: $N(Publikationen) \geq N(Autor)$ & \Square & \Checkedbox\\
-    Es gilt immer: $N(Konferenz) \geq N(Publikation)$ & \Square & \Checkedbox\\
-    Es gilt immer: $N(Gutachter) \geq N(Publikation)$ & \Square & \Checkedbox\\
-  \end{tabular}
-\end{document}

+ 115 - 0
documents/musterloesung-db-aufgabe-d1/musterloesung-db-klausur-b.tex

@@ -0,0 +1,115 @@
+\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 - ER-Modellierung}
+\subsection{Teilaufgabe a)}
+  \begin{tabular}{lcc}
+    & Richtig & Falsch\\
+    Es kann Gutachter geben, die keiner Konferenz zugewiesen sind & \Square & \Checkedbox\\
+    Es ist sichergestellt, dass eine Publikation von mehreren Gutachtern bewertet wird. & \Checkedbox & \Square\\
+    Jede Konferenz besitzt zugewiesene Gutachter & \Square & \Checkedbox\\
+    Jeder Autor steht über seine Publikationen mit mindestens drei Gutachtern in Verbindung. & \Checkedbox & \Square\\
+    Es kann auch Konferenzen geben, auf denen nichts veröffentlicht wird. & \Checkedbox & \Square\\
+    Es gilt immer: $N(Publikationen) \geq N(Autor)$ & \Square & \Checkedbox\\
+    Es gilt immer: $N(Konferenz) \geq N(Publikation)$ & \Square & \Checkedbox\\
+    Es gilt immer: $N(Gutachter) \geq N(Publikation)$ & \Checkedbox & \Square\\
+  \end{tabular}
+
+\subsection{Teilaufgabe b)}
+?
+
+\section{Aufgabe D2 - Normalformen}
+\subsection{Teilaufgabe a)}
+Jede Menge mit $A$ ist Schlüsselkandidat. Also:
+\begin{itemize}
+    \item $\Set{A}$
+    \item $\Set{A, B}$
+    \item $\Set{A, B, C}$
+    \item $\Set{A, B, C, D}$
+    \item \dots
+    \item Allgemein: $\Set{A} \cup x$ mit $x \in \mathcal{P}(\Set{B, C, D})$
+\end{itemize}
+
+\subsection{Teilaufgabe b)}
+$R = \Set{\underline{A}, B, C, D}$ hat
+\begin{itemize}
+    \item 1NF, da jedes Attribut atomar ist
+    \item 2NF, da es bein einem einzelnen Attribut als Schlüssel niemals ein Nicht-Schlüssel von einer Teilmenge abhängig sein kann
+    \item nicht 3NF, da $A \rightarrow B \rightarrow C$. Der Nicht-Schlüssel $C$ ist also vom Schlüssel $A$ transitiv abhängig.
+\end{itemize}
+
+\subsection{Teilaufgabe c)}
+TODO: Überprüfen! Hier bin ich mir sehr unsicher
+
+
+\begin{tabular}{lcccp{5cm}}
+    Zerlegung                                       & 3NF    & verbundtreu & abhängigkeitstreu & Bemerkung\\
+    \hline
+    $S_1 = \Set{\underline{A}BC, \underline{C}D}$   & \xmark & \cmark      & \cmark            & nur 2NF, da $A \rightarrow B \rightarrow C$\\
+    $S_2 = \Set{\underline{A}B, \underline{B}C, \underline{C}D}$ & \cmark & \xmark & \cmark    & \\
+    $S_3 = \Set{\underline{A}B, \underline{B}CD}$ & \cmark   & \cmark      & \cmark            & \\
+    $S_4 = \Set{\underline{A}B, \underline{C}D}$  & \cmark   & \xmark      & \cmark            & nicht verbundtreu, da beide Relation nur per Natural Join verbunden werden können
+\end{tabular}
+
+\section{Aufgabe D3 - SQL}
+\subsection{Teilaufgabe a)}
+\includegraphics[width=0.7\textwidth]{d3.pdf}
+
+\subsection{Teilaufgabe b)}
+\inputminted[linenos, numbersep=5pt, tabsize=4]{sql}{d3b.sql}
+
+Problem: Nun kann es auch Kunden geben, die gar nicht beraten werden!
+
+\subsection{Teilaufgabe c)}
+\inputminted[linenos, numbersep=5pt, tabsize=4]{sql}{d3c.sql}
+
+\subsection{Teilaufgabe d)}
+\inputminted[linenos, numbersep=5pt, tabsize=4]{sql}{d3d.sql}
+
+\subsection{Teilaufgabe e)}
+\inputminted[linenos, numbersep=5pt, tabsize=4]{sql}{d3e.sql}
+
+\section{D4 - Transaktionen und Histories}
+\subsection{Teilaufgabe a)}
+TODO: Keine Ahnung wie man das lesen muss. Kann mir jemand das auf
+Papier machen und ein Foto schicken?
+
+\subsection{Teilaufgabe b)}
+TODO
+
+\subsection{Teilaufgabe c)}
+TODO
+
+\subsection{Teilaufgabe d)}
+TODO
+
+\subsection{Teilaufgabe e)}
+TODO
+\end{document}