Was ist die 1NF?
Schema darf keine Mengenartigen Attribute enthalten.
Was ist die 2NF?
Jede FD (a->b) muss mindesten eine der folgenden Bedingungen erfüllen:
b ist Teil eines Kandidatenschlüssels
b ist nicht von einer echten Teilmenge eines Schlüsselkandidaten abhängig
Alle nicht prim Attribute sind voll funktional abhängig von jedem Schlüsselkandidaten
(Voll funktional abhängig bedeutet, dass sie nicht schon von Teilen des eines Schlüsselkandidaten abhängig sind)
∀ a ∈ R: prim(a) v ( k -> r ^ -k’ -> r)
Was ist die 3NF?
Jede FD (a->b) muss mindestens eine der folgenden 3 Bedingungen erfüllen:
a->b ist trivial (b ist teil von a, z.B: AB->B)
a ist ein Superschlüssel (a bestimmt die gesamte Relation)
Jedes Attribut in b ist prim
Keine Abhängigkeiten zwischen Nicht-Schlüssel-Attributen (NSAs).
∀ a ∈ R: prim(a) v -determinante(a)
Was ist die BCNF?
Jede FD muss mindestens eine folgenden 2 Bedingung erfüllen:
a->b ist trivial (b ist Teil von a, z.B ABC->AB)
Jede Determinante ist ein Schlüsselkandidat
Was ist die 4NF?
Jede MVD muss mindestens eine folgenden 2 Bedingung erfüllen:
a->>b ist trivial (b ist Teil von a, z.B ABC->AB)
Keine doppelten mehrweertigen Abhängigkeiten
Was ist ein Schlüsselkandidat?
Eine minimale Menge von Attributen, welche die gesamte Relation bestimmt.
Dh. Ganz R ist funktional abhängig von S.
Man darf dabei kein Attribut von S entfernen können sodass S' immernoch ganz R bestimmt
Was ist ein Superschlüssel?
Eine Menge von Attributen welche die Relation ganz bestimmt.
Trivial ist R ein Superschlüssel von R
Wie bestimmt man Schlüsselkandidaten zu einer Menge von FDs?
z.B: FD = { A -> BDE, B -> F, CF -> A }
Zu jeder Determinante a in den FDs, bilde die Attributhülle a+:
Sie muss zwei Eigenschaften Erfüllen damit a ein Schlüsselkandidat ist:
Sie muss ganz R bestimmen: a -> R
Sie muss minimal sein: Dh. Nimmt man was aus a weg gilt nicht a’ -> R
z.B:
A+ = { A,B,D,E,F } => nicht a -> R
B+ = { B,F } nicht a -> R
CF+ = { C,F,A,B,D,E } ok a -> R
=> Also CF+ bestimmt R. Aber:
C+ = { C } und F+ = { F } bestimmt nicht R
=> Also ist CF der einzige Schlüsselkandidat
Wie bringt man ein Schema in 3NF?
Mit dem Synthesealgorithmus:
Bestimmung von Funktionalen Abhängkeiten
Linksreduktion
Rechtsreduktion
Zusammenfassen
Aus jeder FD eine Tabelle machen
Wie überführt man ein Schema in BCNF?
Mit dem Dokompositionsalgorithmus:
Was ist die kanonische Überdeckung?
Die kleinste Menge von FDs für ein Schema
Was ist eine Historie?
Eine Zeitliche Abfolge von Operationen von N Transaktionen.
z.B: w1(X) w2(y) c1 c2
Wann ist eine Historie Serialisierbar?
Wenn ihr Serialisierungsgraph keine Zyklen hat.
Man beginnt die Operationen durchzulaufen. Wenn für eine Operation auf X eine spätere Operation einer anderen TX folgt die einen “Konflikt“ hat zichnet man eine Kante von der jetzigen TX auf die folgende TX
Wann ist eine Historie Rücksetzbar?
Wenn jede Transaktion A, die von einer anderen Transaktion B gelesen hat nach dieser TX B commited.
w1(x) r2(x) c2 c1
-> Nicht rücksetzbar
Wann vermeidet eine Historie kaskadierendes Rücksetzen?
Eine Historie vermeidet kaskadierendes Rücksetzten, wenn jede TX commited, bevor von ihr gelesen wird.
Das ist nicht der Fall, wenn von einer nicht-commiteten TX gelesen wird:
w1(x) r2(y)
Wann ist eine Historie strikt?
Wenn eine TX auf A schreibt w(A), muss sie commiten oder aborten BEVOR eine andere Transaktion A benutzt.
-> Jede TX erhält einen WRITE-LOCK, der erst nach Ende der TX freigegeben wird.
Was sind die Probleme bei der Mehrbenutzersynchronisation?
Lost Update: Das Ergebnis einer TX wird überschrieben
Dirty Read: TX liest einen Wert der dann zurückgesetzt wird
Non Repeatable Read: TX liest zweimal den selben Wert. Beim zweiten mal ist er aber anders
Phantom Problem: TX fände beim zweiten Lesen einer Tabelle A ein Tupel mehr
Was muss für Transaktionen gelten?
ACID:
Atomicity: Alles oder nix. Entweder ganz commited oder aborted
Consistency: Vor und nach jeder TX ist der DB Zustand Konsistent
Isolation: Jede TX ist scheinbar die einzige
Durability: Nach einem commit bleiben die Änderungen immer erhalten
Was sind die unterschiedlichen join Arten?
Regular join: Kreuzprodukt + Selektionsprädikat
Equi Join: Regular join mit = als Selektionsprädikat
Natural Join: Equi Join über gleichnamige Attribute
Left/Right/Full outer join: Behält Tupel aus A, B oder A und B die keinen Partner haben
Left/Right Semi Join: Behält nur Tupel die Partner haben und übernimmt nur Attribute dieser Tupel.
Left/Right Anti join: Kickt alle Tupel die keinen Partner haben
Wie läuft die Recovery aus Log-Einträgen nach einem Verlust des Hauptspeichers ab?
Analyse: Finden aller Winner und Loser Transaktionen (->)
Redo: Ausühren aller Eintrage gemäß LSN (->):
Holen der Seite aus dem Hintergrundspeicher
if( log.lsn < seite.lastLsn ) { perform(); seite.lastLsn = log.lsn }
Undo: Undo aller Einträge von Loser transaktionen (<-)
Undo ausführen & Kompensationseintrag einfügen
Was ist ein CLR und wie ist er aufgebaut?
Ein Compensation Log Record besteht aus:
LSN: Neue Log Sequenze Number (Oft #i’)
Transaktions ID (z.B: T2)
Seitennummer z.B: PA
Undo Infos. z.B: A -= 10
PrevLSN: Pointer zum Vorherigen Log Eintrag der Transaktion
UndoNxtLSN: Verweis auf die LSN des zurückgesetzten Eintrags
Wie unterscheidet man starke und schwache Entitäten in ER-Diagrammen?
Die schwachen Entitäten sind doppelt umschlossen.
Was ist die Kardinalität?
Die Menge an Tupeln in einer Relation. z.B: |A| = 10
Was ist die Selektivität?
der Anteil an Tupeln die bei einer Operation herauskommen.
SQL: Wie zählt man eine Liste von Tupeln durch?
select *, rank() over (order by name)
from Students
Zuletzt geändertvor 2 Jahren