diff --git a/documents/musterloesung-db-aufgabe-d1/Makefile b/documents/musterloesung-db-aufgabe-d1/Makefile index 84f2b73..677e844 100644 --- a/documents/musterloesung-db-aufgabe-d1/Makefile +++ b/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 diff --git a/documents/musterloesung-db-aufgabe-d1/d3.dia b/documents/musterloesung-db-aufgabe-d1/d3.dia new file mode 100644 index 0000000..9e896aa Binary files /dev/null and b/documents/musterloesung-db-aufgabe-d1/d3.dia differ diff --git a/documents/musterloesung-db-aufgabe-d1/d3b.sql b/documents/musterloesung-db-aufgabe-d1/d3b.sql new file mode 100644 index 0000000..63601e1 --- /dev/null +++ b/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; diff --git a/documents/musterloesung-db-aufgabe-d1/d3c.sql b/documents/musterloesung-db-aufgabe-d1/d3c.sql new file mode 100644 index 0000000..ea30590 --- /dev/null +++ b/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" diff --git a/documents/musterloesung-db-aufgabe-d1/d3d.sql b/documents/musterloesung-db-aufgabe-d1/d3d.sql new file mode 100644 index 0000000..611dffd --- /dev/null +++ b/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 +) diff --git a/documents/musterloesung-db-aufgabe-d1/d3e.sql b/documents/musterloesung-db-aufgabe-d1/d3e.sql new file mode 100644 index 0000000..df16177 --- /dev/null +++ b/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 diff --git a/documents/musterloesung-db-aufgabe-d1/mathe-vorlage.tex b/documents/musterloesung-db-aufgabe-d1/mathe-vorlage.tex deleted file mode 100644 index 112b606..0000000 --- a/documents/musterloesung-db-aufgabe-d1/mathe-vorlage.tex +++ /dev/null @@ -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} diff --git a/documents/musterloesung-db-aufgabe-d1/musterloesung-db-klausur-b.tex b/documents/musterloesung-db-aufgabe-d1/musterloesung-db-klausur-b.tex new file mode 100644 index 0000000..f7bd0d3 --- /dev/null +++ b/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}