Datenbanksysteme Klausurvorbereitung

Entwurfstheorie

Funktionale Abhängigkeiten

Definition - funktionale Abhängigkeit:

Seien Teilmengen eines Relationenschemas . ist von funktional abhängig oder bestimmt funktional, geschrieben , genau dann wenn zu jeder Relation und jedem Wert in genau ein Wert in gehört:

Beispiel

Lieferant()

Überprüfung von FDs

Funktionale Abhängigkeiten sind wichtige Regeln, um die Datenqualität sicherzustellen. Sollte in einer Relation die FD erfüllt sein, so darf folgende SQL-Anfrage kein Ergebnis liefern:

Diese Überprüfung garantiert aber nicht, dass auch zukünftig die FD erfüllt ist.

Funktionale Abhängigkeiten sind wichtige Regeln, um die Datenqualität sicherzustellen.

Ziel von FDs

Vorgehensweise - Minimierung der Anzahl der FDs

Ziel: Zu einer gegebenen Menge an FDs soll eine möglichst kleine äquivalente Menge von FDs berechnet werden.

Definition - Besondere FDs

Hülle einer Menge von FDs

Alle gültigen FDs in können mit Hilfe dieser Regeln auch hergeleitet werden.

Ableitungsregeln

Trotz der Eigenschaften der Armstrong-Axiome ist es komfortabler noch folgende Regeln zu benutzen:

Berechnung Hülle per Algorithmus

Algorithmus zur Berechnung der Hülle mit gegebenen F (Menge der FDs einer Anwendung) und A (alle Attribute die von A funktional bestimmt werden)

Beispiel: Hüllenberechnung

Gesucht ist Hülle

  1. =
  2. =
  3. =
  4. = und der Algorithmus terminiert
  5. =

Erklärung zu den einzelnen Schritten:

  1. Trivialer Fall, Füge hinzu (noch vor der Schleife im Algorithmus)
  2. Wir gehen in die Schleife und schauen, ob die linken Seiten unserer FDs jeweils schon vollständig im Ergebnis () enthalten sind. Dies ist offensichtlich bei der Fall, also können wir unserem Ergebnis hinzufügen.
  3. Da die FD existiert und eine Teilmenge des Ergebnis ist, kann und dem Ergebnis hinzugefügt werden.

Kanonische Überdeckung

Ziel: Minimierung der FDs einer Anwendung (Menge )

Algorithmus

Gegeben: Menge mit funktionalen Abhängigkeiten

  1. Führe für jede FD aus F die Linksreduktion durch:

    Überprüfe für alle , ob überflüssig ist, d.h. ob Hülle

    Ist dies der Fall, ersetze in durch

  2. Führe für jede verbliebende FD die Rechtsreduktion durch:

    Überprüfe für alle , ob überflüssig ist, d.h. ob Hülle

    Ist dies der Fall, wird durch ersetzt

  3. Entferne die FDs der Form (die im 2-ten Schritt entstanden sind)

  4. Ersetze alle FDs der Form durch ...

Beispiel: Berechnung kanonische Überdeckung

Schritt 1: Linksreduktion

Info: Einelementige linke Seiten werden übersprungen.

, A ist überflüssig, da in der Hülle von enthalten ist: Hülle. Ersetze also mit .

Wir erhalten also:

Schritt 2: Rechtsreduktion

Fragestellung bei der ersten FD : Kommen wir, wenn wir weglassen trotzdem irgendwie von nach ? Antwort: Nein! Wir kommen von nur nach , aber von nicht mehr weiter. muss also weiterhin enthalten bleiben.

Führt man diesen Schritt für alle FDs aus erhält man:

Schritt 3: Entferne FDs der Form

Schritt 4: Fasse alle FDs mit gleicher linker Seite zu einer zusammen

Verlustlosigkeit, Hüllentreue Zerlegung

Zerlegung von Relationen

Definition verlustlose Zerlegung:

Zusätzlich wollen wir, dass die FDs lokal auf den zerlegten Relationen prüfbar sind, daraus ergibt sich folgende Definition.

Definition hüllentreue Zerlegung:

Beispiel: Zerlegung

Sei und eine Zerlegung von RS. Zeigen oder widerlegen Sie, ob die folgende Zerlegung von verlustlos und hüllentreu ist.

Verlustlosigkeit:

Aus der Definition folgt, dass entweder oder gelten muss.

Wir sehen, dass also gilt. Somit ist die Zerlegung verlustlos.

Hüllentreue:

Hierfür schauen wir, ob alle FDs aus in den beiden Schemata und "untergebracht" werden können. Beispielsweise könnte in untergebracht werden, da sowohl , als auch in dieser Relation enthalten sind. Somit ergibt sich:

Also und somit ist die Zerlegung auch hüllentreu.

Normalformen

Normalformen sollen einen guten Datenbankentwurf garantieren.

Schlüsselkandidaten: Gibt es mehrere Schlüssel in einer Relation, nennt man diese auch Schlüsselkandidaten Prime Attribute: Attribute, die Teil eines Schlüsselkandidaten sind Nicht-Prime Attribute: Attribute, die nicht Teil eines Schlüsselkandidaten sind

1. Normalform

Alle Attribute können nur atomare, nicht weiter zerlegbare Werte annehmen.

2. Normalform

Jedes Nicht-Prime Attribut ist von jedem Schlüsselkandidaten voll funktional abhängig.

image-20210709133521064

In diesem Beispiel ist TeilMenge voll funktional vom Schlüsselkandidaten (ProjektId, TeilId) abhängig. Projektleiter ist jedoch nur von ProjektId abhängig, daher wäre es nur partiell und nicht voll funktional vom Schlüsselkandidaten abhängig. Also muss die Relation in zwei Relationen aufgeteilt werden, um die 2. NF zu erhalten.

Info: 2. NF kann nur verletzt sein, wenn der Schlüssel zusammengesetzt ist.

3. Normalform

Es gibt kein Nicht-Prime Attribut, welches von einem Schlüsselkandidaten transitiv abhängig ist.

image-20210709133541242

Projektleiter ist direkt abhängig von ProjektId, ProjektLeiterEmail jedoch nur von Projektleiter und somit transitiv vom abhängig vom Schlüsselkandidaten. Um die Relation in die 3. NF zu bringen muss auch hier wieder eine neue Relation erzeugt werden.

Synthesealgorithmus für die 3. NF (wenn es komplexer wird)

Ziel: Zerlegung einer Universalrelation in Relationen unter folgenden Bedingungen:

Eingabe:

Ausgabe:

Ablauf:

  1. Berechnung der kanonischen Überdeckung von

  2. Für jede :

    • Erzeuge Relationenschema
    • Ordne alle FDs zu

image-20210709133606389

  1. Falls kein erzeugtes Schema den Kandidatenschlüssel von enthält, erzeuge Relation mit Schema und .

    • Nur wenn der Kandidatenschlüssel nicht schon vollständig in einer der Relationen enthalten ist. Diese Relation hat dann genau die Attribute des Schlüsselkandidaten und keine funktionalen Abhängigkeiten
  2. Eliminiere alle Schemata, die in einem anderen Schema enthalten sind.

    • Beispiel: ist im obigen Beispiel bereits vollständig in enthalten und kann somit eliminiert werden.

Synthesealgorithmus liefert ein Datenbankschema mit folgenden Eigenschaften:

  1. Alle Relationen sind in der 3. NF
  2. Hüllentreu
  3. Kein Informationsverlust

Beispiel: Synthesealgorithmus bei gegebener kanonischer Überdeckung

Schritt 2 (Relationenschemata erzeugen):

mit FDs mit FDs mit FDs

Schritt 3:

Da Schlüsselkandidat in diesem Beispiel unbekannt, muss man diesen erst herausfinden: Alle Attribute können über und erreicht werden, daher ist der Schlüssel . Da in keiner der Relationen aus Schritt 2 vollständig enthalten ist, muss entsprechend eine 4. Relation erzeugt werden:

Schritt 4:

Keine Relation kann eliminiert werden, da keine Relation vollständig in einer anderen Relation enthalten ist.