Dies ist eine studentische Prüfungsschwierigkeit immitierende Aufgabenzusammenfassung die Themen der Vorlesung Implementieren von Datenbanken. Es handelt sich insbesondere nicht um einen sogenannten "Braindump". Die Aufgaben oritieren sich an den Aufgaben in der ursprünglichen Klausur insofern, dass hier zum Beipsiel anstatt der Frage "Sind Kühe Lila?" die Frage "Machen Kuehe Schokolade?" steht. Auf beide Fragen ist die Antwort: Nein, du schaust zuviel Milkawerbung.
Vorsicht ist die Mutter der Porzelankiste bei dieser Klausur, auch im WS1617 (der Nachfolgeklausur von dieser hier) kam mit R-Baumen z.B. ein voellig neuer Aufgabentyp in die Klausur, es ist naheliegen, dass dies auch in Zukunf passieren wird. Ausserdem koennen hier natuerlich selbstverstaendlich Fehler enthalten sein.
\subsection{Anything else?}
Schaut auf meinem gitlab vorbei wenn ihr dieses Dokument verbesser wollte, Pullrequest werden gerne gesehen. \textit{gitlab.cs.fau.de/ik15ydit/latexandmore} Außerdem bedanke ich mich beim Lehrstuhl fuer Datenbanksystem der Uni Erlangen fuer ihre Umfassenden Lernmaterialien und exzelennte Literaturempfehlung die Erstellung von Loesung und erarbeiten von Alternativen Frage und Aufgabenstellungen so stark erleichtert haben. Falls ihr ueber diese Klausur diskutieren wollte koennt ihr dafuer das bereitsexistierende \textit{https://pad.stuve.fau.de/p/idb} verwenden.\\\\\\
\includegraphics[width=1\textwidth]{idb_done.png}%70% der Textbreite
\item\textbf{d)} Die Seitenersetzungsstrategie LFU (Least frequently used) hat der Vorteil, dass sich der Puffer schnell an neue Datenlokalitaeten anpasst.\\
Nein, mitunter wurde sie nicht veraendert oder es gibt andere Gruende warum man sie nicht auf die Platte schreiben moechte (rollback aus hoeherer Ebene?).
Nein, R-Baume sind Suchbaeume, daher wissen wir immer in welchen Ast wir absteigen muessen, und es kann nicht sein, dass wir uns mehrere Blaetter auf der Suche nach einem Wert anschauen muessen.
Ja, steal beudetet, dass Dinge aus dem Puffer vor Ende der Transaktion zurueckgeschrieben werden, damit haette man evt. einen Inkonsitenten Zustand auf der Platte den man nicht rueckgaengig machen kann weil man Forward-Recovery hat.
Deine Mutter hat \textbf{Clock} als Seitenersetzungsstrategie verwendet und kapiert jetzt ihren eigenen Code nicht mehr, deswegen musst du die Seitenersetzungsstrategie jetzt unten nachbauen. Du hast 3 Plaetze in deinem Haupspeicher, die haben jeweils einen Kontrollzustand (also auch 3 insgesamt) unten ist dann noch dein Pointer bei welchem Platz du gerade bist. GoGoGo!!!\\\\
Gebe an welche Schnittstellen ein Datenbankpuffer \textbf{nach oben im Schichtenmodell} anbieten muss. (Welche Parameter, welche Rueckgabewerte und wozu sie dient.)
\subsubsection*{a) Erklaeren sie den Unterschied zwischen Primaer und Sekundaerorganisation im Bezug auf Datenspeicherung.}
\vspace{1cm}
\solution{Bei der Primaerorganisation werden die Daten tatsaechlich gespeichert, bei der Sekundaerorganisation werden sie nur referenziert, es kann also mehrere Sekundaerorganisationen ohne Datenredundanz geben.
}
\vspace{1cm}
\textbf{b)} Fuege in einen leeren \textbf{B*-Baum} mit $k_{inner}=2$ und $k_{leaf}=1$ die Tupel
\textbf{\hspace{1cm}(8,A)\hspace{1cm}(17,Z)\hspace{1cm}(1,U) \hspace{1cm}} in dieser Reihenfolge ein. Einzelschritte sind nicht noetig.\\\\
Weil wir jetzt schnell die Korrelanz zwischen einer FSI-Mitgliedschaft und dem geistigen Zustand eines Studenten rausfinden wollen moechten wir einen Index ueber diese Attribute anlegen: \textbf{Dumm, FSI-Mitglied, Gehirngeschaedigt}. Welche Indexform eignet sich dafuer besonders gut?
rN(x) bedeutet, Transaktion N liest Element x. wN(x) bedeutet, Transaktion N schreiben Element x. Zeichne einen Abhaengigkeitsgraphen, es muss bei jeder Kante ersichtlich sein wie sie Zustande gekommen ist.
\subsection*{d) Wann ist ein Ablauf serialisierbar?}
\vspace{1cm}
\solution{ Wenn kein Zyklus im Abhaengigkeitsgraphen. }
\vspace{1cm}
\subsection*{e) Gegeben ist der folgende Ablauf im Kontext einer fiktiven Lagerverwaltung: (repraesentativ in Java-like Syntax, alle Methoden des fiktiven Datenbank Frameworks scheissen eine "Failure"-Exception.)}
commitTransaction(); //die Transaktion wird beendet
}catch(Failure f)
continue;
}
}
\end{lstlisting}
\textbf{Erklaere welches Problem hier Problem hier auftreten kann und wie es zu loesen waere.}
\solution{
Während der Transaktion wird auf Eingabedaten von des Operators gewartet und währenddessen sind alle anderen Transaktionen auf die gleiche Datenbanktabelle blockiert. Es kann passieren, dass der Operator extrem lange mit der Eingabe braucht und derweil sind andere DB-Zugriffe blockiert. Die Loesung ist die Transaktion kleiner zu machen und den lokalen counter irgendwie mit in die DB zu commiten sobald man etwas am Bestand aendert.
\textit{'-' steht hier fuer die Differenz zweier Mengen}
\solswitch{\vspace{3cm}}{\vspace{1cm}Nein, denn es gehen bei der Projection Informationen verloren, die spaeter fuer die Differenz der Mengen einen Unterschied machen koennten. (Eine Tabelle mit drei Attributen die auf zwei Attribute reduziert/projeziert wurde und in der nur Zeilen gleich scheinen weil das unterscheidende dritte Attribut nicht mehr sichtbar/vorhanden ist.\vspace{1cm}}
String a = Integer(Integer.parseInt(tmp)).toString();
sql = "INSERT INTO Trololololol VALUES(" + a + ")";
stmt.executeUpdate(sql);
}
}
\end{lstlisting}
\solution{
Eher nicht, weil jede versuchte SQL Injection am Integer.parseInt() zerschellt. In der Klausur wars eine, aber ich wollte mal trollen. Man koennte auch argumentieren, dass das hier einen DOS-Angriff ermoeglichen koennte.
}
\vspace{2.5cm}
\textbf{b)} Wie kann man das obrige Program SICHER gegen SQL-Injections schuetzen?
\solution{
\begin{lstlisting}[language=java]
preparedStmt.setInt(1, a)
preparedStmt.execute();
\end{lstlisting}
Aber alleine die Aussage Prepared-Statements empfinde ich hier als wichtig.