\documentclass{article}
\usepackage{listings}
\begin{document}
\section{Aufgabe 1}
Antworte mit richtig oder falsch und Begruendung. [4P pro Aufgabe, es wurden aber immer nur 4 oder 0 vergeben und nur bei (dem Lehrstuhl nach) richtiger Begruendung]
\begin{itemize}
	\item \textbf{a)} Bei Verwendung von Magnetplatenlaufwerken zur Speicherung von Datenbanken ist es guenstig haeufig, zusammen gebrauchte Daten auf dem selben Zylinder abzulegen.
	\item \textbf{b)} Die von der Schicht der Speicherstruckturen angebotenen Adressierungseinheiten umfassen unter anderem Tupel, Relationen und Sichten.
	\item \textbf{c)} Bei direkter Seitenzuordnung genuegt es, die Blocknummer der ersten Seite eines Sgmentes zu kennen, um die Blocknummer einer beliebigen Seite dieses Segments ermitten zu koennen
	\item \textbf{d)} Das Problem der Seitenersetzungsstrategie LFU (Least frequently used) fuer den Datenbankpuffer ist, dass Seiten im Puffer nicht alt werden.
	\item \textbf{e)} Jede Seite, die aus dem Datenbankpuffer verdreangt wird, muss auf den persistenten Speicher geschrieben werden.
	\item \textbf{f)} Bei der Verschiebung eines Satzes in eine andere Seite aendert sich dessen TID, so dass sie die Nummer der neuen Seite enthaelt.
	\item \textbf{g)} Wenn in einer Anfrage ein Attribut auf Gleichheit mit einer Konstanten geprueft wird (z.B. alter = 42) und es existiert ein Index fuer dieses Attribut, dann ist der Zugriff ueber den Index grundsaetzlich schneller als ein Table-Scan. 
	\item \textbf{h)} Felder variabler Laenge koennen nicht als Schluessel in einem Index verwendet werden.
	\item \textbf{i)} Bei der Vergroesserung der Hashtabelle bei Linear Hashing, wird die Zahl der Buckets jedes mal verdoppelt.
	\item \textbf{j)} Bei der Suche nach einem Wert in einem B*-Baum muss immer bis zu einem Blattknoten abgestiegen werden.
	\item \textbf{k)} Ein B-Baum enthaelt Verweise auf Saetze, aber nie ganze Saetze.
	\item \textbf{l)} Bei der Suche in einem R-Baum nach Objekten in einem bestimmten rechteckigen Bereich muss an jedem Knoten in maximal einen Ast abgestiegen werden. 
	\item \textbf{m)} Materialisierte Sichten koennen die Ausfuehrung von Anfragen beschleunigen.
	\item \textbf{n)} Das C in den ACID-Eigenschaften von Transaktionen steht fuer Concurrency.
	\item \textbf{o)} Bei reiner Forward-Recovery duerfen Aenderungen einer Transaktion erst nach deren erfolgreichem Commit in den Datenbestand eingebracht werden.
\end{itemize}


\section{Aufgabe 2 Datenbankpuffer}
\subsection{a) - 12 Punkte}
Fuer einen Puffer stehen drei Kacheln im Hauptspeicher zur Verfuegung. Die unten angegebene Referenzreihenfolge stellt einen Auszug aus dem Protokoll der Seitenzugriffe des Datenbanksystems dar. Vervollstaendigen Sie die Tablle: Geben Sie an, welche Seiten zu welchem Zeitpunkten in den Kacheln des Prozesses eingelagert sind, wenn das Datenbanksystem \textbf{Clock} als Seitenersetzungsstrategie verwendet. Notieren Sie auch die Kontrollzustaende fuer jede Belegung. \\


\begin{tabular}{|r|r|r|r|r|r|r|}\hline
Zeitpunkt		& ...	& n	& n+1 	& n+2 	& n+3 	& n+4 	\\\hline
Referenzfolge 	& ...	& 3 & 9 	& 3 	& 5 	& 2		\\\hline
				&		& 	& 		& 		&		&		\\
Hauptspeicher 	&		& 	& 		& 		&		&		\\\hline
Kachel A 		& ...	& 8	& 		& 		&		&		\\\hline
Kachel B 		& ...	& 3	& 		& 		&		&		\\\hline
Kachel C 		& ...	& 7	& 		& 		&		&		\\\hline
				&		& 	& 		& 		&		&		\\
Kontrollzustaende &		& 	& 		& 		&		&		\\\hline
Kachel A 		& ...	& 1	& 		& 		&		&		\\\hline
Kachel B 		& ...	& 1	& 		& 		&		&		\\\hline
Kachel C 		& ...	& 1	& 		& 		&		&		\\\hline
Auswahlzeiger auf Kachel & ...	& C	& 		& 		&	&	\\\hline
\end{tabular} 

\subsection{b) - 8 Punkte}
Ergaenzen sie die folgende Tabelle um alle Funktionen mit ihren Parametern und ihrem Rueckgabewert, die ein Datenbankpuffer an seiner Schnittstelle zur verfuegung stellen muss. Beschreiben sie jede Funktion kurz, so dass eindeutitg erkennbar ist, was sie tut und welche Bedeutung die Parameter haben. Moeglicherweise benoetigen sie nicht alle Zeilen der Tabelle. \\ \\

\begin{tabular}{|r|r|r|r|}
\textbf{Funktion} & \textbf{Parameter} & \textbf{Rueckgabewert} & \textbf{Beschreibung} \\\hline \\ \\
& & & \\\hline \\ \\ \\
& & & \\\hline \\ \\ \\
& & & \\\hline \\ \\ \\
& & & \\\hline \\ \\ \\
& & & \\\hline
\end{tabular}

\newpage
\section{Aufgabe 3 TID-Adressierung - 14 Punkte}
Ergaenzen sie in den folgenden Teilaufgaben die Skizzen so, dass sie den Zustand nach der jeweils angegebenen Operation darstellen. Geben sie ausserdem die TIDs der Saetze mit den angegebenen Laengen nach der Ausfuerung der Operation an.\\ \\
Die Saetze werden ueber TIDs adressiert. Eine TID benoetigt 2 Beyte und ein Indexeintrag 1 Byte Speicherplatz. Jeder Block hat eine Groesse von 16 Bytes. ein Byte ist jeweils durch ein Kaestchen repraesentiert. Die Frespeicherverwaltung durchsucht die Seiten in der Reihenfolge 0,1,2 nach freiem Platz. Freier Speicher innerhalb einer Seite befindet sich immer nur am Seitenende. \\ \\
Es muss keine Laengen- oder Headerinformtion zu den Saetzen gespeichert werden. Diese sei dem System bekannt. Saetze werden nur fragmenteirt, wenn es notwendig ist. Verweise zwischen Fragmenten und bei Verschiebungen sind einzutragen, in der Form \textbf{TID(3,2)}. Die ersten Fragmente eines fragmentierten Satzes belegen immer ganze Bloecke. Nur das letze Fragment kann in einem schon teilwese belegten Block abgelegt werden. \\ \\
Die Teilaufgaben sind voneinander unabhaengig. Ein F steht fuer bereits voll. \\

\begin{itemize}
% a ------------------------------------------------------------------------------------ a%
	\item \textbf{a)} Die Seiten enthalten zum Ausgangszeitpunkt einen Satz der Laenge 5 mit TID(0,0). Fuegen sie einen Satz mit Laenge 10 ein.\\  \\
\begin{tabular}{c|c|c|c}
F &  F & F  & F  \\\hline
F &   &   &   \\\hline
 &   &   &   \\\hline
 &   &   & 0
\end{tabular}
\hspace{10mm}
%\textbf{Seite 1}
\begin{tabular}{c|c|c|c}
 &   &   &   \\\hline
 &   &   &   \\\hline
 &   &   &   \\\hline
 &   &   & 0 
\end{tabular}
%\textbf{Seite 2}
\hspace{10mm}
\begin{tabular}{c|c|c|c}
 &   &   &   \\\hline
 &   &   &   \\\hline
 &   &   &   \\\hline
 &   &   & 0 
\end{tabular}\\\\
-\hspace{8mm} Seite 0 \hspace{2cm} Seite 1 \hspace{2cm} Seite 2 \hspace{2cm} -\\\\
\textbf{Laenge 10: TID(\hspace{5mm},\hspace{5mm})}

% b ------------------------------------------------------------------------------------ b%
	\item \textbf{b)} Die Seiten enthalten zum Ausgangszeitpunkt zwei Saetze mit TID(0,0), Laenge 12 und TID(1,0), Laenge 6. Fuegen sie einen Satz mit Laenge 20 ein.\\ \\
	\begin{tabular}{c|c|c|c}
F &  F & F  & F  \\\hline
F &  F & F  & F  \\\hline
F &  F & F  & F  \\\hline
 &   &   & 0
\end{tabular}
\hspace{10mm}
%\textbf{Seite 1}
\begin{tabular}{c|c|c|c}
F & F  & F  & F  \\\hline
F & F  &   &   \\\hline
 &   &   &   \\\hline
 &   &   &  
\end{tabular}
%\textbf{Seite 2}
\hspace{10mm}
\begin{tabular}{c|c|c|c}
 &   &   &   \\\hline
 &   &   &   \\\hline
 &   &   &   \\\hline
 &   &   &  
\end{tabular}\\\\
- \hspace{8mm} Seite 0 \hspace{2cm} Seite 1 \hspace{2cm} Seite 2 \hspace{2cm} -\\\\ %dont ask and dont try yo remove the -
\textbf{Laenge 20: TID(\hspace{5mm},\hspace{5mm})}
% c ------------------------------------------------------------------------------------ c%
\newpage
	\item \textbf{c)} Die Seiten enthalten zum Ausgangszeitpunkt zwei Saetze mit TID(0,0), Laenge 4 und TID(0,1), Laenge 8.\\ \\
	\textbf{Ausganszustand (Loesung nicht hier sondern unten eintragen)}\\\\
	\begin{tabular}{c|c|c|c}
F &  F & F  & F  \\\hline
F &  F & F  & F  \\\hline
F &  F & F  & F  \\\hline
 &   &   & 0
\end{tabular}
\hspace{10mm}
%\textbf{Seite 1}
\begin{tabular}{c|c|c|c}
F & F  & F  & F  \\\hline
F & F  &   &   \\\hline
 &   &   &   \\\hline
 &   &   &  
\end{tabular}
%\textbf{Seite 2}
\hspace{10mm}
\begin{tabular}{c|c|c|c}
 &   &   &   \\\hline
 &   &   &   \\\hline
 &   &   &   \\\hline
 &   &   &  
\end{tabular}\\\\
- \hspace{8mm} Seite 0 \hspace{2cm} Seite 1 \hspace{2cm} Seite 2 \hspace{2cm} -\\\\ %dont ask and dont try yo remove the -
Vergroessern sie den Satz TID(0,1) auf Laenge 12.\\\\
	\begin{tabular}{c|c|c|c}
F &  F & F  & F  \\\hline
F &  F & F  & F  \\\hline
F &  F & F  & F  \\\hline
 &   & 4  & 0
\end{tabular}
\hspace{10mm}
%\textbf{Seite 1}
\begin{tabular}{c|c|c|c}
 &   &   &   \\\hline
 &   &   &   \\\hline
 &   &   &   \\\hline
 &   &   &  
\end{tabular}
%\textbf{Seite 2}
\hspace{10mm}
\begin{tabular}{c|c|c|c}
 &   &   &   \\\hline
 &   &   &   \\\hline
 &   &   &   \\\hline
 &   &   &  
\end{tabular}\\\\
- \hspace{8mm} Seite 0 \hspace{2cm} Seite 1 \hspace{2cm} Seite 2 \hspace{2cm} -\\ %dont ask and dont try yo remove the -

\textbf{Laenge 4: TID(\hspace{5mm},\hspace{5mm}), Laenge 12: TID(\hspace{5mm},\hspace{5mm})}

\end{itemize} 

\section{Aufgabe 4 Indexstrukturen - 26 Punkte}
\subsection{Ankreuzerino}
\subsubsection*{Kreuzen sie an wie viele Primaerorganisationen es fuer eine Satzmenge ohne Redundanz maximal geben kann}
\begin{itemize}
	\item keine
	\item eine
	\item zwei
	\item beliebig viele
\end{itemize}
\subsubsection*{Kreuzen sie an wie viele Sekundaerorganisationen es fuer eine Satzmenge ohne Redundanz maximal geben kann}
\begin{itemize}
	\item keine
	\item eine
	\item zwei
	\item beliebig viele
\end{itemize}
\subsection{Baumabfuck}
\textbf{a)} Fuegen sie in einen anfangs leeren \textbf{B*-Baum} mit $k_{inner}=2$ und $k_{leaf}=1$ die Tupel
\textbf{\hspace{1cm}(7,B)\hspace{1cm}(42,A)\hspace{1cm}(2,X) \hspace{1cm}} in dieser Reihenfolge ein. Die gegebenen Tupel sind nach dem Schema \textbf{(Schluessel,Wert)} aufgebaut. Zeichnen sie den entstandenen Baum nach dem Einfuegen aller Tupel. \\\\
\textbf{b)} Loeschen sie aus dem gegebenen B-Baum den Schluessel 36. Zeichnen sie den entstandenen Baum nach dem komplett ausgefuehrten Loesungsweg.\\\\
TODO BILD\\
\textbf{c)} Nennen sie drei gruende, warum der folgende Baum kein korrekter \textbf{B-Baum} ist.\\\\
TODO BILD\\
\textbf{d)} Gegeben ist eine Tabelle mit dem folgendem Schema, mit der Studentenwohnheimszimmer verwaltet werden:\\\\
\textbf{Zimmer(Zimmernummer, Etage, MitKueche, MitBad, GehirngeschaedigteVollspassten)}\\\\
Um die Suche nach Zimmern mit bestimmten Eigenschaften (z.B. Zimmer im Erdgeschoss mit Kueche und Bad) zu beschleunigen sollen ueber die Attribute \textbf{Etage, MitKueche, MitBad und GehirngeschaedigteVollspassten} Indizies angelegt werden. Kreuzen sie an, welche der folgenden Indexarten sich hierfuer am Besten eignet.
\begin{itemize}
	\item B-Baum-Index
	\item B*-Baum-Index
	\item Hash-Index
	\item Bitmap-Index
\end{itemize}


\section{Aufgabe 5 Transaktionen - Punkte 32}
\subsection*{a) Nennen sie die Eigenschaft, die eine Real World Action erfuellen muss, damit sie als solche bezeichnet wird.}
\vspace{1cm}
\subsection*{b) Real World Actions muessen mindestens eine von zwei Eigenschaften erfuellen, damit sie im Rahmen einer Transaktion ausgefuehrt werden koennen. Nennen sie diese beiden Eigenschaften.}
\vspace{1cm}
\subsection*{c) Gegeben ist der folgende Ablauf dreier Transaktionen T1, T2, T3:}
rN(x) bedeutet, Transaktion N liest Element x. wN(x) bedeutet, Transaktion N schreiben Element x.
\begin{itemize}
	\item r2(a)
	\item r3(b)
	\item r3(c)
	\item r1(a)
	\item r3(a)
	\item w2(a)
	\item w3(b)
	\item r1(b)
	\item w1(c)
	\item w2(b)
\end{itemize}
Zeichnen sie den vollstaendigen Abhaengigkeitsgraphen und notieren sie an den kanten alle Datenobjekte, aufgrund derer die jeweiligen Abhaengigkeit besteht.\\\vspace{1cm}
\subsection*{d) Begruenden sie in einem Satz warum der in Teilaufgabe-C gegebene Ablauf serialisierbar oder nicht serialisierbar ist.}
\newpage
\subsection*{e) Ein Programm in einer Supermarktkasse hat den im Folgenden beschriebenen Ablauf. Das eingesetzte Datenbanksystem garantiert die ACID-Eigenschaft von Transaktionen.}
\begin{enumerate}
	\item Falls einer der folgenden Schritte scheitert, gib eine Fehlermeldung aus und springe zurueck zu \textbf{1.}
	\item BD-Transaktion starten
	\item Lokale Variable Gesamtpreis auf 0 setzen
	\item Wiederhole bis Ende-Taste gedrueckt
	\begin{enumerate}
		\item Artikelnummer von Kassierer Abfragen
		\item Artikel in der Datenbanktabelle aller Artikel ueber die Artikelnummer suchen
		\item Variable Gesamtpreis um Artikelpreis erhoehen
		\item Attribut Bestand des Artikels in der Datenbanktabelle aller Artikel um 1 verringern
	\end{enumerate}
	\item Gesamtpreis anzeigen
	\item Neuen Eintrag mit dem Gesamtpreis zur tabelle Umsaetze in der Datenbank hinzufuegen
	\item Transaktion mit Commit beenden und Erfold oder MIsserfolg des Commit dem Kassierer anzeigen
\end{enumerate}
Erklaeren sie in ein zwei bis drei Saetzen das Problem, das in Bezug auf Transaktionen (unter Vernachlaessigung etwaiger Real World Actions) bei diesem Ablauf auftreten kann. \\\vspace{1cm}
\subsection*{f) Erklaeren sie in ein zwei bis drei Saetzen eine Moeglichkeit, den Programmablauf aus Aufgabe e) zu aendern, um das dort auftretende Problem zu vermeiden}\vspace{1cm}
\subsection{Ankreuzehuehueriono}
Gegeben ist ein Datenbanksystem, das sowohl ein Redo- also auch ein Undo-Log einsetzt und Action Consisten Checkpoints (d.h. es sind keine Aenderungsoperationen zum Sicherungspunkt aktiv) verwendet.
\subsubsection*{Kreuzen sie and, bis zu welcher Stelle das Undo-Log waehrend des Undo-Laufs gelesen werden muss. Beachten sie die Leserichtung.}
\begin{itemize}
	\item BOT-Eintrag der aeltesten Gewinner-Transaktion
	\item BOT-Eintrag der aeltesten Verlierer-Transaktion
	\item BOT-Eintrag der juengsten Gewinner-Transaktion
	\item BOT-Eintrag der juengsten Verlierer-Transaktion
	\item Beginn des Logs
	\item Ende des Logs
	\item Sicherungspunkt
\end{itemize}
\subsubsection*{Kreuzen sie an, beginnend ab welcher Stelle das Redo-Log waehrend des Redo-Laufs gelesen werden muss. Beachten sie die Leserichtung.}
\begin{itemize}
	\item BOT-Eintrag der aeltesten Gewinner-Transaktion
	\item BOT-Eintrag der aeltesten Verlierer-Transaktion
	\item BOT-Eintrag der juengsten Gewinner-Transaktion
	\item BOT-Eintrag der juengsten Verlierer-Transaktion
	\item Beginn des Logs
	\item Ende des Logs
	\item Sicherungspunkt
\end{itemize}

\section{Aufgabe 6 Anfragenverarbeitung - Punkte 18}
\subsubsection*{a) Gegeben ist die folgende SQL-Anfrage. Zeichnen sie den nicht-optimierten Operatorengraphen.}
\begin{lstlisting}[language=SQL]
SELECT *
FROM (
	SELECT R.a, R.b, S.c
	FROM R JOIN S on R.p = S.p
	WHERE S.d = 42
	UNION
	SELECT T.a, T.b, T.c
	FROM T
) X
WHERE X.b > 10;
\end{lstlisting}
\subsubsection*{b) Gegeben sind zwei Relationen R und S, die beide ueber die gleichen Attribute verfuegen. E sei eine echte Teilmenge der Attributmenge von R bzw. S. Begruenden sie, warum die folgende Behauptung gilt oder nicht gilt.}
\begin{lstlisting}[language=SQL]
PROJ( R - S , E ) = PROJ( R , E) - PROJ( S , E)
\end{lstlisting}
Umgangssprachlich: Duerfen Mengendifferenz und Projektion vertauscht werden? \\\\

\section{Aufgabe 7 Programmschnittstelle - Punkte 10}
\subsubsection*{a) Geben sie in ein bis zwei Saetzen an, warum das unten dargestellte Programm anfaellig fuer SQL-Injections ist.}
[ Sinngemaess stand hier ein Programm bei dem der Nutzer einen String in einem nicht-escape'ten String kontrollieren konnte ]\\\\
\subsection*{b) Wie kann man sich generell gegen SQL-Injections schuetzen?}
\end{document}