var questions = new Array();
var answers = new Array();

questions[questions.length] = "Was ist der Unterschied zwischen dem relationalem und anderen Modellen?";
answers[answers.length] = "Im Gegensatz zu dem satzorientierten hierarchischen und dem ebenfalls satzorientierten Netzwerkmodell ist das relationale Modell mengenorientiert.";

questions[questions.length] = "Vergleichen Sie B-B&auml;ume mit Hashing im Kontext von Datenbanken?";
answers[answers.length] = "Beides wird bei Datenbanken eingesetzt. B-B&auml;ume werden zur Speicherung der eigentlichen Daten benutzt, da Sie gut mit Daten, die auf Hintergrundspeichern liegen, umgehen k&ouml;nnen. Hashing wird bei Indizes gesetzt, da es ann&auml;hernd O(1) Zugrifferlaubt.";

questions[questions.length] = "Erkl&auml;ren sie die Begriffe Datenbankschema/Auspr&auml;gung und intensional/extensional.";
answers[answers.length] = "Das Datenbankschema legt die Struktur der abgespeicherten Daten fest. Eine Auspr&auml;gung ist ein momentan g&uuml;ltiger Zustand der Datenbasis. Man spricht auch von der intensionalen (Schema) und der extensionalen (Auspr&auml;gung) Ebene einer Datenbank. Der Unterschied entspricht dem von Klasse und Objekt in der Objektorientierung.";

questions[questions.length] = "Was ist eine Datenbank?";
answers[answers.length] = "Eine Datenbasis ist eine Menge von Daten. Angereichert um weitere Daten, die das DBMS zur Erf&uuml;llung seiner Aufgabe ben&ouml;tigt, bilden sie eine Datenbank. Ein DBMS einschliesslich einer oder mehrerer Datenbanken nennt man Datenbanksystem.";

questions[questions.length] = "Wie sieht eine relationale Datenbank aus?";
answers[answers.length] = "Eine relationale Datenbank speichert die Daten in Tabellen.";

questions[questions.length] = "Welche Schichten gibt es bei einer Datenbank?";
answers[answers.length] = "<p>Man kann drei Schichten unterscheiden.</p> <ol><li>Physische Schicht: Hier wird festgelegt, wie die Daten gespeichert werden.</li><li>Logische Schicht: Auf der logischen Schicht wird in einem Datenbankschema festgelegt, welche Daten gespeichert werden.</li><li>Sichten: Durch Sichten werden Teilmengen der gespeicherten Daten bereitgestellt.</li></ol> <p>Das Schichtenmodell dient der Datenunabh&auml;ngigkeit, es kann zwei Stufen der Datenunabh&auml;ngigkeit gew&auml;hrleisten:</p> <ol><li><i>Physische Datenunabh&auml;ngigkeit:</i> Die Modifikation der physischen Speicherstruktur l&auml;sst die logische Schicht unver&auml;ndert.</li> <li><i>Logische Datenunabh&auml;ngigkeit:</i> Kleinere &auml;nderungen des Datenbankschemas (z. B. Umbenennung von Attributen) k&ouml;nnen durch Sichtenffverborgenffwerden.</li></ol>";

questions[questions.length] = "Erkl&auml;ren Sie den Unterschied zwischen Entity und Klasse.";
answers[answers.length] = "Entit&auml;ten haben keine Methoden, entsprechen also eher Pascal Records. Ausserdem sind alle Attribute einer Entit&auml;t atomar.";

questions[questions.length] = "Wie kann man Objekte mit einer relationalen Datenbank realisieren?";
answers[answers.length] = "Die Objekte m&uuml;ssen 'flachgeklopft' werden, so dass die Objekteigenschaften sich als atomare Attribute speichern lassen. Dazu sind i. A. mehrere Relationen n&ouml;tig. Methoden k&ouml;nnen nicht abgebildet werden.";

questions[questions.length] = "Was ist ein Datenbankschema?";
answers[answers.length] = "Das Datenbankschema legt die Struktur der abgespeicherten Daten fest.";

questions[questions.length] = "Was ist ein Datenmodell?";
answers[answers.length] = "Ein Datenmodell ist ein Satz von abgestimmten Konzepten zur Beschreibung der Repr&auml;sentation von Informationen durch Daten.";

questions[questions.length] = "Was gibt es f&uuml;r Modellierungsm&ouml;glichkeiten f&uuml;r Datenbanken?";
answers[answers.length] = "<ul><li>ER-Modell</li><li>semantisches Modell</li><li>funktionales Modell</li><li>objektorientierte Entwurfsmodelle</li></ul>";

questions[questions.length] = "Beschreiben Sie das ER-Modell.";
answers[answers.length] = "<ul><li><i>Entities:</i> Entit&auml;ten sind wohl unterscheidbare physisch oder gedanklich existierende Dinge der zu modellierenden Welt. Im ER-Modell wird eigentlich mit Entitymengen gearbeitet.</li><li><i>Relationships:</i> Beziehungen zwischen Entit&auml;ten. Diese Beziehung k&ouml;nnen Funktionalit&auml;ten habe,z. B. 1:N. Sie k&ouml;nnen ausserdem durch die (min; max)-Notation noch genauer beschrieben werden.</li><li><i>Attribute:</i> Attribute dienen dazu Entit&auml;ten zu charakterisieren.</li><li><i>Rollen:</i> Rollen spezifizieren die Rolle einer Entit&auml;t in einer Beziehung, dies ist z. B. bei rekursivenBeziehung n&ouml;tig.</li><li><i>schwache Entit&auml;ten:</i> Schwache (existenzabh&auml;ngige) Entit&auml;ten sind in ihrer Existenz von einer &uuml;bergeordneten Entit&auml;t abh&auml;ngig. Oft sind sie nur in Kombination mit dem Schl&uuml;ssel der &uuml;bergeordneten Entit&auml;t eindeutig identi zierbar.</li><li><i>Generalisierung:</i> Generalisierung bzw. Spezialisierung kann durch is-a-Beziehung modelliert werden.</li><li><i>Aggregation:</i> Aggregation kann durch part-of -Beziehungen modelliert werden.</li></ul>";

questions[questions.length] = "Was ist eine Entit&auml;t?";
answers[answers.length] = "Entit&auml;ten sind wohl unterscheidbare physisch oder gedanklich existierende Dinge der zu modellierenden Welt.";

questions[questions.length] = "Wie kann man ein ER-Modell in das relationale Modell &uuml;berf&uuml;hren?";
answers[answers.length] = "<p>Alles was mit dem ER-Modell modelliert wurde, muss (so weit m&ouml;glich) in Relationen &uuml;berf&uuml;hrt werden.</p><ul><li><i>Entit&auml;ten:</i> straight-forward!</li><li><i>Beziehungen:</i> Zuerst werden alle Beziehungen in Relationen umgesetzt, dies wird sp&auml;ter noch verfeinert.Die Relation erh&auml;lt alle Schl&uuml;ssel-Attribute der beteiligten Entit&auml;ten sowie alle Attribute der Beziehung. M&ouml;glicherweise m&uuml;ssen Attributnamen umbenannt werde um Duplikate auszuschliessen oder die &uuml;bersichtlichkeit zu erh&ouml;hen. Die Wahl der Schl&uuml;ssel h&auml;ngt von der Funktionalit&auml;t der Beziehung ab<ul><li><i>N:M:</i>Die Menge aller Fremdschl&uuml;ssel bildet den Schl&uuml;ssel.</li><li><i>1:N:</i> Als Schl&uuml;ssel wird der Schl&uuml;ssel der N Entit&auml;t gew&auml;hlt.</li><li><i>1:1:</i> Hier kann man es sich aussuchen.</li><li><i>tern&auml;re Beziehungen:</i> Hier m&uuml;ssen die Schl&uuml;ssel aller nicht-1-Entit&auml;ten aufgenommen werden.</li></ul></li><li><i>Generalisierung:</i> Das relationale Modell unterst&uuml;tzt Generalisierung nicht, deshalb gibt es nur suboptimale L&ouml;sungen. Mann muss die Information auf die Ober- bzw. Untertypen aufteilen. Dadurch ist aber keine Vererbung realisiert, um an die ganze Information zu gelangen, muss man joinen.</li></ul><p>Verfeinerung. Das wichtigste ist, dass nur Relationen mit gleichen Schl&uuml;sseln zusammengefasst werden d&uuml;rfen.</p><ul><li><i>N:M:</i> Diese Beziehungen bleiben als eigenst&auml;ndige Relation erhalten.</li><li><i>1:N:</i> Diese Beziehungen k&ouml;nnen zusammengefasst werden, wobei die N-Entit&auml;t um einen Fremdschl&uuml;ssel erweitert werden muss.</li><li><i>1:1:</i> Hier kann man sich aussuchen in welche Richtung man zusammenfassen m&ouml;chte. Das ist nat&uuml;rlich von den Entit&auml;ten abh&auml;ngig, so sollte man z. B. so zusammenfassen, dass m&ouml;glichst wenige NULL-Eintr&auml;ge entstehen.</li></ul>";

questions[questions.length] = "Gibt es Vererbung im ER-Modell?";
answers[answers.length] = "Es gibt Generalisierung, die durch is-a-Beziehung realisiert wird.";

questions[questions.length] = "Was ist der Unterschied zwischen einem UML-Klassendiagramm und einem ER-Diagramm?";
answers[answers.length] = "<ul><li>Entit&auml;ten haben keine Methoden</li><li>Attribute von Entit&auml;ten k&ouml;nnen nur atomar sein</li><li>Vererbung wird bei ER durch is-a-Beziehung realisiert</li><li>Aggregation wird bei ER durch part-of -Beziehung realisiert</li></ul>";

questions[questions.length] = "Modellieren Sie eine 3-fach Beziehung.";
answers[answers.length] = "<img src='pics/stud_prof_vorl.gif'><br>Durch diese Modellierung hat die Relation die Eigenschaften einer partiellen Funktion<i>pr&uuml;fen : Studenten x Vorlesungen -> Professoren</i> D. h. jedem Paar (Student, Vorlesung) ist genau ein Pr&uuml;fer zugeordnet. Ein Student kann sich also nicht in einer Vorlesung von zwei Professoren pr&uuml;fen lassen.";

questions[questions.length] = "Wo kommen im ER-Modell die Fremdschl&uuml;ssel vor?";
answers[answers.length] = "Die Fremdschl&uuml;ssel kommen gar nicht vor. Sie existieren implizit durch Angabe der Relationships.";

questions[questions.length] = "Was ist ein Schl&uuml;ssel?";
answers[answers.length] = "Eine minimale Teilmenge von Attributen, deren Werte die zugeordnete Entity eindeutig identifizieren.";

questions[questions.length] = "Was ist ein Prim&auml;rschl&uuml;ssel?";
answers[answers.length] = "Kandidatenschl&uuml;ssel sind minimale Schl&uuml;ssel. Gibt es mehrere Kandidatenschl&uuml;ssel, so w&auml;hlt man einen als Prim&auml;rschl&uuml;ssel.";

questions[questions.length] = "Was ist ein Fremdschl&uuml;ssel?";
answers[answers.length] = "Attribute einer Relation die dazu dienen Tupel einer anderen Relation zu identifizieren, heissen Fremdschl&uuml;ssel.";

questions[questions.length] = "Wie werden Beziehung im relationalen Modell dargestellt?";
answers[answers.length] = "Beziehungen werden wie alles anderen im relationalen Modell durch Relationen (Tabellen) dargestellt.";

questions[questions.length] = "Geben Sie ein Beispiel f&uuml;r eine Operation auf einer Relation.";
answers[answers.length] = "Selektion, Projektion, Vereinigung, Differenz, Kreuzprodukt, Umbenennung, diverse Joins, Schnitt, Division";

questions[questions.length] = "Wie &uuml;berf&uuml;hrt man tern&auml;re Relationships ins relationale Modell?";
answers[answers.length] = "Die Relation erh&auml;lt alle Schl&uuml;ssel-Attribute der an der Beziehung beteiligten Entities und alle Attribute der Beziehung. Schl&uuml;ssel der Relation ist die Vereinigung aller Schl&uuml;ssel von Entit&auml;ten, die eine N oder M Funktionalit&auml;t haben.";

questions[questions.length] = "Erkl&auml;ren Sie Operatoren im Kontext der relationalen Algebra.";
answers[answers.length] = "Im relationalen Modell werden alle Information in Relationen gespeichert. Relationen sind erst mal nur Mengen von Tupeln, deswegen k&ouml;nnen auf ihnen s&auml;mtliche Mengenoperationen durchgef&uuml;hrt werden. Diese Operationen bekommen im Kontext der Datenbankandwendung eine bestimmte Semantik.";

questions[questions.length] = "Bei welchen Operatoren muss man Duplikate eliminieren?";
answers[answers.length] = "Bei Projektion und Vereinigung.";

questions[questions.length] = "Was ist eine Relation?";
answers[answers.length] = "Eine Relation ist eine Teilmenge des Kreuzprodukts mehrerer Mengen. Im relationalen Modell werden Relationen meist als Tabellen dargestellt.";

questions[questions.length] = "Wie w&uuml;rden Sie Vererbung mit Hilfe von SQL 'nachbauen'?";
answers[answers.length] = "<p><li>Untertypen als Sicht:</li> Hierbei werden die Untertypen ausschliesslich als Sichten angelegt. Die Anfragen m&uuml;ssen &uuml;ber recht komplizierte Joins aufgel&ouml;st werden.</p> <p><li>Obertypen als Sicht:</li> Die Obertypen werden als Sichten angelegt, die ihre Ergebnisse durch Vereinigung von Anfragen an die Untertypen, berechnen.</p>";

questions[questions.length] = "Wie kann man Anfragen optimieren?";
answers[answers.length] = "Anfrage k&ouml;nnen optimiert werden indem die entstehende Zwischenergebnisse m&ouml;glichst klein gehalten werden. D. h. man versucht das unvermeidliche Kreuzprodukt m&ouml;glichst sp&auml;t zu machen und es dadurch m&ouml;glichst klein zu halten.";

questions[questions.length] = "Was sind Integrit&auml;tsbedingungen?";
answers[answers.length] = "<p>Man unterscheidet zwischen statischen und dynamischen Integrit&auml;tsbedingungen. Statische Bedingungen m&uuml;ssen von jedem Zustand der Datenbank erf&uuml;llt sein. Dynamische Bedingungen m&uuml;ssen an Zustands&uuml;berg&auml;nge sichergestellt werden. Integrit&auml;tsbedingung sind:</p><ul><li>Schl&uuml;sseldefinitionen, keine zwei Tupel mit gleichem Schl&uuml;ssel d&uuml;rfen existieren.</li><li>Kardinalit&auml;ten werden bei dem &Uuml;bergang ins relationale Modell fest eingebaut.</li><li>Referentielle Integrit&auml;t (keine 'Dangling References')</li></ul>";

questions[questions.length] = "Geben Sie ein Beispiel f&uuml;r eine Relation, die in 2NF aber nicht in 3NF ist.";
answers[answers.length] = "<p>Ein Verlag speichert alle seine B&uuml;cher in der abgebildeten Relation. Diese Relation ist in 2NF da alle nicht Schl&uuml;ssel-Attribute voll funktional abh&auml;ngig vom Schl&uuml;ssel ArtNr sind. Sie ist aber nicht in 3NF da die Nicht-Schl&uuml;ssel-Attribute Titel und Autor abh&auml;ngig vom Nicht-Schl&uuml;ssel-Attribut ISBN sind.</p><img src='pics/autor.gif'>";

questions[questions.length] = "Was ist funktionale Abh&auml;ngigkeit?";
answers[answers.length] = "Wenn ein Attribut aus einem anderen logisch folgt. Z.B. folgt die Stadt aus der Postleitzahl.";

questions[questions.length] = "Was ist volle funktionale Abh&auml;ngigkeit?";
answers[answers.length] = "Ein Attribut Klassleiter h&auml;ngt voll von einem Schl&uuml;ssel (Jahrgangstufe, Abteilung) ab, wenn alle Attribute des Schl&uuml;ssels ben&ouml;tigt werden, um das Attribut (hier Klassleiter) zu identifizieren.";

questions[questions.length] = "Wann ist eine funktionale Abh&auml;ngigkeit trivial?";
answers[answers.length] = "Trivial ist eine funktionale Abh&auml;ngigkeit, wenn die rechte Seite Teilmenge der linken ist: Jahrgangstufe,Abteilung->Abteilung w&auml;re eine triviale Abh&auml;ngigkeit.";

questions[questions.length] = "Was sind Normalformen?";
answers[answers.length] = "<p>Normalformen dienen dazu die G&uuml;te eines Relationenschemas zu bewerten. Es gibt folgende Normalformen:</p><ul><li>1NF: Eine Relation ist in erster Normalform wenn alle Attribute atomare Wertebereiche haben.</li><li>2NF: Eine Relation ist in zweiter Normalform wenn alle Nicht-Schl&uuml;ssel-Attribute voll funktional abh&auml;ngig von allen Kandidatenschl&uuml;ssel sind.</li><li>3NF: Die dritte Normalform ist verletzt wenn eine Nicht-Schl&uuml;ssel-Attribut von einem anderen Nicht-Schl&uuml;ssel-Attribut abh&auml;ngig ist.</li></ul>";

questions[questions.length] = "Erl&auml;utern Sie den Algorithmus zur Zerlegung in 3NF und f&uuml;hren Sie ihn an einem Beispiel vor.";
answers[answers.length] = "<img src='pics/in3nf.gif'>";

questions[questions.length] = "Warum bringt man Relationen in Normalformen?";
answers[answers.length] = "Bei schlechten Relationenschemata kann es zu folgenden Anomalien kommen: Updateanomalie, Einf&uuml;geanomalie, L&ouml;schanomalie.";

questions[questions.length] = "Ist die Zerteilung (3NF) verlustlos und abh&auml;ngigkeitsbewahrend?";
answers[answers.length] = "Ja.";

questions[questions.length] = "Was sind die  Armstrong-Axiome?";
answers[answers.length] = "<p>Reflexivit&auml;t, Verst&auml;rkung, Transitivit&auml;t</p><p>Mit den Armstrong-Axiomen kann die H&uuml;lle F+ einer Menge F von funktionalen Abh&auml;ngigkeiten bestimmt werden.</p>";

questions[questions.length] = "Was ist eine Transaktion?";
answers[answers.length] = "Aus der Sicht des Datenbankbenutzers ist eine Transaktion eine Arbeitseinheit, die eine bestimmte Funktion erf&uuml;llt. Aus der Sicht des DBMS ist eine Transaktion eine Folge von Lese-und Schreiboperationen abgeschlossen durch ein abort oder commit.";

questions[questions.length] = "Welche Eigenschaften m&uuml;ssen Transaktionen erf&uuml;llen?";
answers[answers.length] = "ACID";

questions[questions.length] = "Was bedeutet das Akronym ACID?";
answers[answers.length] = "<ul><li><i>Atomicity:</i> Eine Transaktion muss atomar, also ununterbrechbar sein. Entweder werden keine oder alle &auml;nderungen in der Datenbasis festgeschrieben ( alles-oder-nichts -Prinzip).</li><li><i>Consistency:</i> Eine Transaktion muss bei Beendigung einen konsistenten Zustand hinterlassen, anderenfalls wird sie komplett zur&uuml;ckgenommen. W&auml;hrend der Ausf&uuml;hrung der Transaktion k&ouml;nnen teilweise Konsistenzbedingungen verletzt werden.</li><li><i>Isolation:</i> Nebenl&auml;u ge Transaktionen d&uuml;rfen sich nicht gegenseitig beeinflussen. F&uuml;r eine Transaktion muss es so aussehen, als sei sie die einzige auszuf&uuml;hrende Transaktion.</li><li><i>Durability:</i> Die Wirkung einer erfolgreich abgeschlossenen Transaktion muss dauerhaft in der Datenbasis festgeschrieben werden. Die bereits ausgef&uuml;hrten Teile einer abgebrochenen Transaktion m&uuml;ssen vollst&auml;ndig r&uuml;ckg&auml;ngig gemacht werden.</li></ul>";

questions[questions.length] = "Welche Probleme gibt es bei der Ausf&uuml;hrung von Transaktion und welche L&ouml;sungen gibt es?";
answers[answers.length] = "<p>Probleme beim Einbenutzerbetrieb:<br><b>Das DBMS kann abst&uuml;rzen.</b> Die Recovery muss daf&uuml;r sorgen, den urspr&uuml;nglichen Zustand wieder herzustellen.<b>Am Ende einer Transaktion zeigt sich, dass Konsistenzbedingungen verletzt werden.</b> Bisher durchgef&uuml;hrt Operationen m&uuml;ssen r&uuml;ckg&auml;ngig gemacht werden.</p><p>Probleme beim unkontrollierten Mehrbenutzerbetrieb:<br><b>Lost update:</b> Durch ungeschickte Verzahnung mehrere Transaktionen k&ouml;nnen &Auml;nderungen verloren gehen. Die Mehrbenutzersynchronisation muss das ausschliessen.<br><b>Dirty read:</b> Durch ungeschickte Verzahnung mehrere Transaktionen liest eine Transaktion Daten, die noch nicht freigegeben wurden. Die Mehrbenutzersynchronisation muss das ausschliessen. <b>Phantomproblem:</b> Eine Transaktion liest w&auml;hrend ihres Ablaufs bestimmte Daten zweimal. Zwischen dem ersten und zweiten Zugri  f&uuml;gt eine andere Transaktion ein neues Datum ein, das mit ber&uuml;cksichtigt werden muss. Dadurch unterscheiden sich der erste und der zweite Zugri , da beim zweiten Zugri  das neu eingef&uuml;gte Phantom mit gelesen wurde. Die Mehrbenutzersynchronisation muss das ausschliessen.</p><p>Probleme beim kontrollierten Mehrbenutzerbetrieb:<br><b>Verklemmungen:</b> Mehrere Transaktionen k&ouml;nnen in einen Deadlock geraten.</p>";

questions[questions.length] = "Was ist 'Serialisierbarkeit'?";
answers[answers.length] = "Beim Konzept der Serialisierbarkeit werden die Vorz&uuml;ge der seriellen Ausf&uuml;hrung (Isolation) mit den Vorteilen des Mehrbenutzerbetriebs (bessere Auslastung) kombiniert. Eine serialisierbare Ausf&uuml;hrung mehrer Transaktionen entspricht einer kontrollierten Verzahnung und zwar so, dass das Ergebnis dem des echten seriellen Ausf&uuml;hrens entspricht.";

questions[questions.length] = "Personen / Rollen gibt es bei Datenbanken?";
answers[answers.length] = "Anwender/Anwendungsprogramme, Datenbankadministrator, Datenbanknutzer.";

questions[questions.length] = "Welche Aufgaben hat das Datenbankmanagementsystem?";
answers[answers.length] = "<ul><li>Verwaltung persistenter(dauerhafter) Daten</li><li>Datenaustausch</li><li>Verhindern von unkontrollierten Zugriffe</li><li>Effiziente Zugriffe</li></ul><p>Daher ist eine Kontrolle, Wartung, Mehrbenutzerbetrieb, Unabh&auml;ngigkeit von Anwendungsprogrammen und einheitliche Schnittstellen m&ouml;glich.";

questions[questions.length] = "Welche Arten von Datenbanksystemen gibt es?";
answers[answers.length] = "<ul><li>Einzelbenutzer (CD-Verwaltung f&uuml;r zu Hause - MSAccess)</li><li>Mehrbenutzer (Firma - auf eine DB k&ouml;nnen viele zugreifen)</li><li>Verteiltes Sysem (Bank - jede Filiale hat eigene DB)</li><li>Client-Server (auf einem Server l&auml;uft die DB)</li><li>Mutlidatenbank (ein Reiseb&uuml;ro greift f&uuml;r eine Reisebuchung auf viele verschiedene DB von versch. Anbietern zur&uuml;ck)</li></ul>";

questions[questions.length] = "Welche Anforderungen werden an ein DBS gestellt (mit L&ouml;sungen)?";
answers[answers.length] = "<ul><li>Redundanz (Normalformtheorie)</li><li>Inkonsistenz (Normalformtheorie)</li><li>Zugriffe (DBMS)</li><li>Mehrbenutzerbetrieb (DBMS)</li><li>Sicherheit (DBMS)</li><li>Datenverlust (Recoverysystem)</li><li>Integrit&auml;t (Transaktionen)</li><li>Kosten (Schnittstellen)</li></ul>";

questions[questions.length] = "Was sind Views? Nenne 3 Vorteile.";
answers[answers.length] = "Views sind Teilmengen der gespeicherten Daten (Benutzerfreundlich, Datenschutz, Datenunabh&auml;ngigkeit)";

questions[questions.length] = "Was ist das 3-Schichten-Modell?";
answers[answers.length] = "<ul><li>Extern oder View</li><li>Konzept oder logische Schicht</li><li>interne Schicht</li></ul><p>Es herrscht Datenunabh&auml;ngigkeit nach oben.</p>";

questions[questions.length] = "Erkl&auml;ren Sie am Beispiel Schule das 3-Schichten-Modell.";
answers[answers.length] = "<ul><li>Extern: Lehrkr&auml;fte der 5a</li><li>Konzept: Tabellen (Lehrer, Sch&uuml;ler, unterrichtet,...)</li><li>Intern: Dateiorganisation und Indexe</li></ul>";

questions[questions.length] = "Welche drei Anomalien (Probleme) k&ouml;nnen bei Relationenschemata auftreten?";
answers[answers.length] = "<ul><li>Update (Eintr&auml;ge werden beim &auml;ndern &uuml;bersehen)</li><li>Insert (Unvollst&auml;dnige Daten werden eingetragen)</li><li>Delete (Zuviele Daten werden gel&ouml;scht)</li></ul><p>Anomalien k&ouml;nnen aufgrund von Abh&auml;ngigkeiten zwischen den Attributen einer Relation entstehen</p>";

questions[questions.length] = "Was ist die H&uuml;lle F<sup>+</sup>?";
answers[answers.length] = "<p>F<sup>+</sup> ist die Menge aller funktionalen Abh&auml;ngigkeiten FD, die aus F folgen.</p><ul><li>triviale FDs</li><li>aufgef&uuml;hrte FDs</li><li>FDs mit Teilmenge der rechten Seiten der gegebenen FDs</li></ul>";

questions[questions.length] = "Was ist die Atrributh&uuml;lle?";
answers[answers.length] = "Das ist die Menge an Attributen, so dass alle gew&uuml;nschten FDs erf&uuml;llt werden bzw. logisch folgen.";

questions[questions.length] = "Was sind funktionalen Abh&auml;ngigkeiten FD?";
answers[answers.length] = "FD (functional dependencies) sind Abh&auml;ngigkeiten zwischen den Attributen einer Relation, die sich aufgrund der Anforderungen an die Modellierung ergeben. Z.B. h&auml;ngt die Postleitzahl von Ort ab.";

questions[questions.length] = "Wie l&auml;uft der Attributh&uuml;llenalgorithmus ab und was macht er?";
answers[answers.length] = "Mit dem Algorithmus kann festgestellt werden, ob ausgehend von einer Teilmenge an Attribut unter Ber&uuml;cksichtigung der FDs alle anderen Attribute folgen.<br><img src='pics/attrhull.gif'>";

questions[questions.length] = "F&uuml;hre den Attributh&uuml;llenalgorithmus f&uuml;r Lehrer{PersNr, Name, Fach, Jahr, Pflichtfach} und F={PersNr -> Name, Jahr; Fach -> Pflichtfach} und f&uuml;r die Teilmenge {PersNr, Fach} durch.";
answers[answers.length] = "<ol><li>Init: Erg = {PersNr, Fach}</li><li>Schritt: Erg = {PersNr, Fach} &cap; {Name, Jahr}, da die linke Seite der ersten FD in Erg liegt.</li><li>Schritt: Erg = {PersNr, Fach, Name, Jahr} &cap; {Plfichtfach}</li></ol>";

questions[questions.length] = "Wie findet man eine minimale Menge an FDs?";
answers[answers.length] = "<ol><li><i>Rechtsreduktion</li>Starte mit einfachen FDs (rechte Seite besteht nur aus einem Attribut.)</li><li><i>Linksreduktion</li>Bei FDs mit mehr als 2 Attributen auf der linken Seite wird probeweise eines weggelassen und der Attributh&uuml;llenalgorithmus durchgef&uuml;hrt. Funktioniert er immer noch, so war das Attribut auf der linke Seite un&ouml;tig und kann weggelassen werden.</li><li>Entferne alle redundanten FDs.</li></ol>";

questions[questions.length] = "Finde die minimale &Uuml;berdeckung f&uuml;r F={A->B, B->C, A->C, AB->C, A->BD}.";
answers[answers.length] = "<ol><li>Rechtsreduktion: Aus A->BD wird A->B und A->D</li><li>Linksreduktion: Betrachte AB->C. A oder B redundant?</li><li>L&ouml;schen der redundanten FDs A->B und A->C</li><li>Ergebnis: F={A->B, B->C, A->D}</li></ol>";

questions[questions.length] = "Was ist ein Superschl&uuml;ssel, ein Schl&uuml;sselkandidat, ein Prim&auml;rschl&uuml;ssel und ein Fremdschl&uuml;ssel?";
answers[answers.length] = "<ul><li>Jede Teilmenge der Attributmenge eines Entitytyps, anhand deren Wertkombination die Entities dieses Typs identifizierbar sind, hei&szlig;t Superschl&uuml;ssel dieses Entity-Typs.</li><li>Ein minimaler Superschl&uuml;ssel, d.h. ein Superschl&uuml;ssel mit einer minimalen Menge von Schl&uuml;sselattributen, hei&szlig;t Schl&uuml;sselkandidat. Minimale Menge bedeutet dabei, dass aus dieser Menge kein Attribut weggelassen werden kann, ohne die Superschl&uuml;sseleigenschaft der Menge zu zerst&ouml;ren.</li><li>Einer der Schl&uuml;sselkandidaten eines Entity-Typs wird beim ER-Entwurf als Prim&auml;rschl&uuml;ssel ausgew&auml;hlt und dient dann zur Identifizierung von Entities. </li><li> Seien R und S zwei verschiedene Relationen. Dann hei&szlig;t der Prim&auml;rschl&uuml;ssel von S Fremdschl&uuml;ssel von S in R, falls er auch zum Relationenschema von R geh&ouml;rt.<br><img src='pics/fremdschluessel.gif'></li></ul>";

questions[questions.length] = "Wie bestimmt man Superschl&uuml;ssel?";
answers[answers.length] = "Zun&auml;chst sind alle Attribute, die nicht auf der rechten Seite der FDs auftauchen Teil des Superschl&uuml;ssels, da sind nicht gefolgert werden k&ouml;nnen.<br>Ansonsten muss &uuml;ber den Attributh&uuml;llen-Algorithmus feststellen, ob aus einer Teilmenge X der Attribute wirklich alle anderen Attribute gefolgert werden k&ouml;nnen: AttrHull(F,X) = {A<sub>1</sub>,...,A<sub>n</sub>}";

questions[questions.length] = "Wie kann man feststellen, ob F minimal ist?";
answers[answers.length] = "Man bestimmt die minimale &Uuml;berdeckung von F. Diese muss mit der Menge F &uuml;bereinstimmen.";

questions[questions.length] = "Nenne Beispiele f&uuml;r die verschiedenen Kardinalit&auml;ten bei ER-Diagrammen.";
answers[answers.length] = "<img src='pics/kard_11.gif'><br><img src='pics/kard_1n.gif'><br><img src='pics/kard_nm.gif'><br><img src='pics/kard_minmax.gif'>";

questions[questions.length] = "Wie k&ouml;nnte ein Beispiel mit schwachen Entities in ER-Diagrammen aussehen?";
answers[answers.length] = "<img src='pics/schwach.gif'>";

questions[questions.length] = "Wie werden is-a-Beziehungen im Relationen-Modell daregstellt.";
answers[answers.length] = "<img src='pics/isa.gif'>";

questions[questions.length] = "Berechne R<sup>1</sup>:R<sup>2</sup> bei folgenden Datenmengen:<br><img src='pics/div1.gif'>";
answers[answers.length] = "<table><tr><td>A</td><td>B</td><td>C</td><td>D</td></tr><tr><td>a</td><td>r</td><td>4</td><td>2</td></tr><tr><td>a</td><td>t</td><td>3</td><td>2</td></tr><tr><td>a</td><td>r</td><td>5</td><td>2</td></tr><tr><td>--</td><td>--</td><td>--</td><td>--</td></tr><tr><td>c</td><td>r</td><td>5</td><td>4</td></tr><tr><td>c</td><td>r</td><td>4</td><td>4</td></tr><tr><td>c</td><td>t</td><td>2</td><td>4</td></tr></table><img src='pics/div2.gif'>";

questions[questions.length] = "Gegeben sein R={A, B, C, D, E, G} sowi F={E->D, C->B, CE->G, B->A}.<br><ol><li>Gib eine Schl&uuml;ssel an.</li><li>Liegt die Reltion in 2.NF vor?</li><li>Ist F minimal?</li></ol>";
answers[answers.length] = "<ol><li>{C,E}, da sie in keiner rechten Seiten vorkommen; zudem ist der Schl&uuml;ssel minimal.</li><li>Nein, da nicht alle Attribute vom Schl&uuml;ssel voll funktional abh&auml;ngig sind.</li><li>Ja, da nur eine einfache FDs vorkommen;keine redundanten Attribute vorkommen; es kommen keine redundanten FDs vor.</li></ol>";

questions[questions.length] = "Wie kann man Anfragen optimieren?";
answers[answers.length] = "Fr&uuml;he Selection, fr&uuml;he Projektion; Selektion(Kreuzprodukt)->Natural Join";

questions[questions.length] = "Wann ist eine Zerlegung in Relationen korrekt?";
answers[answers.length] = "Wenn sie verlustfrei und abh&auml;ngigkeitserhaltend ist.";

questions[questions.length] = "Wann liegt eine Boyce-Codd-Normalform vor?";
answers[answers.length] = "Wenn die Relation in 3. NF ist und keine Zykel oder Transitivit&auml;ten bzgl. des Schl&uuml;ssels vorkommen.";

questions[questions.length] = "Was macht der Synthesealogrithmus?";
answers[answers.length] = "Er macht eine Zerlegung in 3. NF.";

questions[questions.length] = "F&uuml;hre den Synthesealgorithmus an <i>Angestellter</i>:<br/> <ul> <li>  <i>PersNr -&gt; Vorname, Nachname, Titel, Funktion, Telefonnummer, Raum_Nr, GebName</i> <br/> </li> <li>  <i>Telefonnummer -&gt; Raum_Nr, GebName</i> <br/> </li> </ul> durch.";
answers[answers.length] = "Zun&auml;chst ben&ouml;tigen wir eine minimale &Uuml;berdeckung dieser funktionalen Abh&auml;ngigkeiten. Wir erhalten diese durch Linksreduktion und Rechtsreduktion der funktionalen Abh&auml;ngigkeiten, d.h. dadurch, dass wir aus allen linken und rechten Seiten so viele Attribute wie m&ouml;glich zu entfernen, ohne dass die H&uuml;lle der funktionalen Abh&auml;ngigkeiten &auml;ndert. In diesem Beispiel erreichen wir dies, indem wir die Attribute <i>Raum_Nr</i> und <i>GebName</i> aus der rechten Seite der ersten Abh&auml;ngigkeit entfernen. Wir erhalten somit die folgenden minimale &Uuml;berdeckung:<br/> <ul> <li>  <i>PersNr -&gt; Vorname, Nachname, Titel, Funktion, Telefonnummer</i> <br/> </li> <li>  <i>Telefonnummer -&gt; Raum_Nr, GebName</i> <br/> </li> </ul> Als n&auml;chstes muss f&uuml;r jede funktionale Abh&auml;ngigkeit eine Relation erzeugt werden, die als allen Attributen besteht, die in der funktionalen Abh&auml;ngigkeit vorkommen. Wir erzeugen also die folgenden beiden Relationen:<br/> <ul> <li>   <i><font size='2' face='Arial'>R1</font>{Persnr, Vorname, Nachname, Titel, Funktion, Telefonnummer}</i>  <br/> </li> <li>   <i><font size='2' face='Arial'>R2</font>{Telefonnummer, Raum_Nr, GebName}</i>  <br/> </li> </ul> Da <i>R1</i> bereits einen Schl&uuml;sselkandidaten enth&auml;lt, sind wir fertig. Wir benennen die Relation <i>R1</i> um in <i>Angestellter</i> und die Relation <i>R2</i> in <i>Telefon</i>. Dadurch erhalten wir die folgenden beiden Relationen, die die alte Relation <i>Angestellter</i> ersetzt:<br/> <ul> <li>   <i><font size='2' face='Arial'>Angestellter</font>{ <u>PersNr</u>: INTEGER, Vorname: STRING, Nachname: STRING, Titel: STRING, Funktion: STRING, Telefonnummer: STRING}</i>  <br/> </li> <li>   <i><font size='2' face='Arial'>Telefon</font>{ <u>Telefonnummer</u>: STRING, Raum_Nr: STRING, GebName: STRING}</i>  <br/> </li> </ul> Das so entstandene Relationenschema ist in dritter Normalform.";

questions[questions.length] = "Redundanz ist i.A. unerw&uuml;nscht. K&ouml;nnen Sie sich dennoch eine sinnvolle Einsatzm&ouml;glichkeit f&uuml;r eine durch das DBMS kontrollierte Redundanz vorstellen?";
answers[answers.length] = "<p>Kontrollierte redundante Datenhaltung kann aus Performancegesichtspunkten sinnvoll sein. Als Beispiel betrachte man die Personenverwaltung einer Universit&auml;t. So sind etwa Verwaltungsangestellte, Professoren, wissenschaftliche Mitarbeiter und Studenten Angeh&ouml;rige einer Universit&auml;t, deren personenbezogene Daten in einer Datenbank abgelegt werden. Anfragen, die an diese Datenbasis gestellt werden, k&ouml;nnen sich auf alle Personen beziehen (z.B. Einladung zu einer Fakult&auml;tsfeier), auf bestimmte Personengruppen (z.B. Erstellen der Lohnabrechnung f&uuml;r alle Angestellten) oder auch selektiv nur auf Teilgruppen (z.B. Einladung zu einer Informationsveranstaltung f&uuml;r alle Studenten im 4. Semester). Die einzelnen Personengruppen sind aber unterschiedlich gro&szlig;. So ist davon auszugehen, dass es deutlich mehr Studenten als wissenschaftliche Mitarbeiter und mehr wissenschaftliche Mitarbeiter als Professoren gibt. H&auml;ufig auftretende Anfragen, die sich nur auf Professoren beziehen, sind dann ineffizient, wenn alle Personendaten zentral, also in einem Datensatz, abgespeichert sind. In diesem Fall w&auml;re das &Uuml;berpr&uuml;fen aller Universit&auml;tsangeh&ouml;rigen und das Ausw&auml;hlen der Professoren notwendig.</p><p>Speichert man in einem Datensatz all die Information, die sich auf alle Personen beziehen (Name, Anschrift, etc.) und in spezialisierten Datens&auml;tzen die Informationen f&uuml;r Studenten (Name, Anschrift, Semester, Studienrichtung), Professoren (Name, Anschrift, Rang, Raum) usw., so kann man beide Typen von Anfragen effizient ausf&uuml;hren. Es ist dann m&ouml;glich, allgemeine Anfragen, die auf alle Universit&auml;tsangeh&ouml;rigen zutreffen, wie auch selektive Anfragen effizient auszuf&uuml;hren. Die redundante Datenhaltung, in diesem Fall also das doppelte Ablegen allgemeiner personenbezogener Daten, wie Name und Anschrift, muss vom Datenbanksystem kontrolliert werden. Um einen konsistenten, d.h. stimmigen Dateninhalt zu gew&auml;hrleisten, m&uuml;ssen &Auml;nderungen des Datenbestands (Einf&uuml;gen, L&ouml;schen oder Modifikation einzelner Datens&auml;tze) sowohl in den spezialisierten Datens&auml;tzen, wie auch in dem globalen Datensatz der Personendaten durchgef&uuml;hrt werden. Diese Strukturierung von Personengruppen spiegelt sich im Datenbankentwurf auch in Form einer Generalisierung wieder.</p>";

questions[questions.length] = "Charakterisieren Sie die 1:1-, 1:N -, N :1- und N :M -Beziehungstypen mittels der (min,max)-Notation.";
answers[answers.length] = "<ul><li>1 : 1 <-> (0,1) : (0,1)</li><li>1 : N <-> (0,*) : (0,1)</li><li>N : 1 <-> (0,1) : (0,*)</li><li>N : M <-> (0,*) : (0,*)</li></ul>";

questions[questions.length] = "Modellieren Sie eine Bahnhof als ER-Diagramm.";
answers[answers.length] = "<img src='pics/bahnhof.gif'>";

questions[questions.length] = "Geben Sie das zugeh&ouml;rige verfeinerte relationale Modell wieder.<br><img src='pics/bahnhof.gif'>";
answers[answers.length] = "Relationen f&uuml;r bin&auml;re Beziehungstypen werden mit Relationen f&uuml;r Entitytypen zusammengefa&szlig;t, falls diese gleiche Schl&uuml;ssel besitzen und es sich dabei um 1 : N -, N : 1- oder 1 : 1-Beziehungen handelt.<p>St&auml;dte : {<i>Name</i>, Bundesland}<br>Bahnh&ouml;fe : {<i>Name</i>, #Gleise, SName, Bundesland}<br>Z&uuml;ge : {<i>ZugNr</i>, L&auml;nge, StartBahnhof, Zielbahnhof}<br>verbindet : {<i>VonBahnhof<i>, NachBahnhof, <i>ZugNr</i>, Abfahrt, Ankunft}<br></p>";

questions[questions.length] = "Welche f&uuml;nf Grundoperationen gibt es in der relationalen Algebra und welche drei k&ouml;nnen von ihnen abgeleitet werden (und wie)?";
answers[answers.length] = "<p>5 Grundoperationen</p><ul><li>Selektion</li><li>Projektion</li><li>Differenz</li><li>Kartesisches Produkt</li><li>Vereinigung</li></ul><p>Abgeleitete Operationen</p><ul><li>Durchnitt: R-(R-S)</li><li>Join: Selektion(Kartesisches Produkt)</li><li>Division</li></ul>";

questions[questions.length] = "<img src='pics/serial.gif'>";
answers[answers.length] = "Probleme gibt es immer bei read-write, write-read, write-write auf die gleiche 'Variable'. Die Pfeile zeigen immer von der zuerst gestarteten zur nachfolgend gestarteten Aktion.<br><img src='pics/serial_l.gif'>";

questions[questions.length] = "Was macht die folgende Anfrage: <i>Select a,b from R,S,T</i>";
answers[answers.length] = "Sie bildet das Kreuzprodukt von R mit S und dann das Ergebnis mit T und gibt nur die Spalten a und b aus.";

questions[questions.length] = "Was macht die folgende Anfrage: <i>Select a,b from R,S,T</i>, wenn R(a,c,d), S(b,e), T(f)";
answers[answers.length] = "Sie bildet das Kreuzprodukt von R mit S und dann das Ergebnis mit T und gibt nur die Spalten a und b aus.<br>Au&szlig;er T ist beispielsweise leer, dann kommt auch nichts raus, da das Kreurprodukt mit einer leeren Menge immer leer ist.";

questions[questions.length] = "Wie lautet der Algorithmus zur Bestimmung der minimalen &Uuml;berdeckung der Menge F der funktionalen Abh&auml;ngigkeiten?";
answers[answers.length] = "<ol><li>&Uuml;berf&uuml;hre aller FDs aus F in einfache FDs.</li><li>Eliminiere f&uuml;r jede FD aus F sukzessive alle redundanten Attribute, d.h entferne bei jeder FD X->A sukzessive die B &isin; X, f&uuml;r die gilt: A &isin; AttrHull(F, X-B).</li><li>Eliminiere sukzessive alle redundanten FDs, d.h. entferne sukzessive alle FDs X->A , f&uuml;r die gilt: A &isin; AttrHull(F - {X->A} , X)</li></ol>";

questions[questions.length] = "Was bedeutet <img src='pics/formel1.gif'>";
answers[answers.length] = "Aus der Relation R werden alle Reihen mit Attributwert A=X ausgew&auml;hlt. Nun wird gez&auml;hlt, wie oft der Eintrag B ungleich null ist. Ist er kleiner oder gleich 1, so h&auml;ngt B von A ab. Es wird also die funktionale Abh&auml;ngigkeit A->B dargestellt.";

questions[questions.length] = "Gegeben sei die Relation R(A,B) und S(C,D) wobei D->R(A) gilt, d.h. D ist Fremdschl&uuml;ssel auf A. Was muss beachtet werden? (Beispiel)";
answers[answers.length] = "<p>Beim Einf&uuml;gen eines neuen Tupels in S muss die Referenz bereits g&uuml;ltig sein, d.h. es muss vorher ein Element in R existieren, so dass D auch auf A referenzieren kann.</p><p>Bevor ein Tupel in R gel&ouml;scht werden kann, muss das referenzierende Tupel in S gel&ouml;scht werden (kaskadierendes L&ouml;schen).</p><p>Sinnvoll z.B. im ER-Diagramm bei R&auml;umen und Geb&auml;uden. Ein Geb&auml;ude darf nur gel&ouml;scht werden, wenn alle R&auml;ume die in diesem Geb&auml;ude sind vorher gel&ouml;scht wurden.</p>";

questions[questions.length] = "Aus welchen Schritten besteht der Synthesealgorihtmus?";
answers[answers.length] = "<ul><li>F&uuml;r jede FD aus F wird ein Relationenschema aufgestellt, dessen Attributmenge sich aus den Attributen der linken und rechten Seite der jeweiligen FD zusammensetzt.</li><li>Enth&auml;lt keines der so entstandenen Relationenschemata einen Schl&uuml;sselkandidaten von R, so wird ein weiteres Relationenschema erzeugt, das als Attribute die Attribute eines (beliebigen) Schl&uuml;sselkandidaten von R hat. </li><li>Attribute von R, die in keinem der in Schritt 1 und 2 erzeugten Relationenschemta auftauchen, werden in einem zus&auml;tzlichen Relationenschema 'zusammengefasst'.</li><li>Von den in Schritt 1 bis 3 entstandenen Schemata werden die Schemata wieder verworfen, deren Attributmenge eine Teilmenge eines anderen in Schritt 1 bis 3 entstandenen Schematas ist.</li></ul>";

questions[questions.length] = "Gegeben sei das Relationenschema R{M, L, N, D, E, G} und die minimale &Uuml;berdeckung F = { L->N , L->M , D->E , D->M }. Bestimmen Sie eine verlustfreie, abh&auml;ngigkeitserhaltende 3NF-Zerlegung!";
answers[answers.length] = "<ul><li>Eventuell alles in einfache FDs umwandeln bzw. auch eine Minimierung vornehmen.</li><li>Schl&uuml;ssel w&auml;re {G,L,D}</li><li>Erstellen von Relationen gem&auml;&szlig; der FDs:<br>R<sub>1</sub>={L,N}<br>R<sub>2</sub>={L,M}<br>R<sub>3</sub>={D,E}<br>R<sub>4</sub>={D,M}</li><li>Da keine Relation den Schl&uuml;ssel enth&auml;lt, wird R<sub>5</sub>={G,L,D} hinzugenommen.</li><li>Relationen mit gleichen Schl&uuml;sseln werden zusammengefasst:<br>R<sub>1,2</sub>={L,N,M}<br>R<sub>3,4</sub>={D,E,M}<br>R<sub>5</sub>={G,L,D}</li></ul>";

questions[questions.length] = "Welche Eigenschaft muss eine Spalte besitzen, um als Schl&uuml;ssel einer Tabelle in Frage zu kommen?";
answers[answers.length] = "Die Eintr&auml;ge m&uuml;ssen einmalig und d&uuml;rfen nicht Null sein.";

questions[questions.length] = "Was charakterisiert eine deklarative Anfragesprache ? Weshalb werden deklarative Sprachen f&uuml;r Datenbankanfragen bevorzugt?";
answers[answers.length] = "<p>Eine deklarative Anfragesprache wie SQL kann folgenderma&szlig;en dargestellt werden:</p><p>Im Gegensatz zur imperativen Programmierung, wo das <i>wie</i> im Vordergrund steht, fragt man in der deklarativen Programmierung nach dem <i>was</i>, das berechnet werden soll. Der Unterschied soll an folgendem popul&auml;ren Beispiel demonstriert werden.</p><a href='http://de.wikipedia.org/wiki/Deklarative_Programmierung' target='_blank' title='wikipedia.de'>Erg&auml;nzung</a>";

/*
<ul>
<li></li>
</ul>

<ol>
<li></li>
</ol>

<img src='pics/'>

<table>
<tr><td></td><td></td></tr>
</table>

questions[questions.length] = "";
answers[answers.length] = "";

*/
