Synthesealgorithmus

Aus testwiki
Zur Navigation springen Zur Suche springen

Der Synthesealgorithmus beschreibt, wie aus einem relationalen Datenbankschema ein Relationenschema der dritten Normalform wird. Das besondere an diesem Algorithmus ist, dass er im Gegensatz zu der intuitiven Zerlegung des Schemas in die dritte Normalform die Abhängigkeitserhaltung in jedem Fall garantiert.

Ein alternativer Algorithmus ist der Zerlegungsalgorithmus, welcher in die Boyce-Codd-Normalform (BCNF) transferiert. Dabei können allerdings Abhängigkeiten verloren gehen (nicht abhängigkeitstreu). Er ist insofern eine Alternative, als jedes relationale Schema, welches in BCNF transformiert wird, dann auch automatisch in dritter Normalform vorliegt.

Voraussetzung

Es müssen alle funktionalen Abhängigkeiten der zu zerlegenden Relation R unter den Attributen bekannt sein.

Beispiel:

  • R=Relation(A,B,C,D,E,F)
  • ={{A}{B,E},{A,E}{B,D},{F}{C,D},{C,D}{B,E,F},{C,F}{B}}

Der Synthesealgorithmus besteht dann aus vier Schritten:

  1. Reduktion von , d. h. die Bestimmung der kanonischen Überdeckung.
  2. Erzeugen der neuen Relationenschemata aus der kanonischen Überdeckung.
  3. Ggf. die Hinzunahme einer Relation, die nur den Ursprungsschlüssel enthält.
  4. Elimination der Schemata, die in einem anderen Schema enthalten sind.

Reduktion

Dies wird auch die Berechnung der kanonischen Überdeckung genannt.

1. Schritt: Linksreduktion

Für alle ψΨ ersetze ΨΓ durch Ψ{ψ}Γ , falls Γ schon durch Ψ{ψ}Γ determiniert ist.

Die obige Bedingung lässt sich testen, indem man überprüft, ob ΓAttributHu¨lle(F,Ψ{ψ}) ist,[1] wobei F die Menge der funktionalen Abhängigkeiten bezeichnet. Falls dies zutrifft, kann ψ aus Ψ entfernt werden.

Beispiel: Relation(A,B,C,D,E,F)

  • AB,E
  • AE_B,D
  • FC,D
  • CDB,E,F
  • C_FB

In der zweiten funktionalen Abhängigkeit fällt E weg, da sich B und D in der Attributhülle von A (A+={A,B,D_,E}) befinden. In der letzten funktionalen Abhängigkeit fällt C weg, wegen F+={B_,C,D,E,F}. Man kann es auch so formulieren: E wird in AEB,D nicht benötigt, um B,D zu erreichen.

Lösung:

  • AB,E
  • AB,D
  • FC,D
  • CDB,E,F
  • FB

2. Schritt: Rechtsreduktion

Für alle γΓ ersetze ΨΓ durch ΨΓ{γ}, falls γ schon transitiv durch Ψ bestimmt ist.

Die obige Bedingung lässt sich überprüfen, indem man für jedes γΓ testet, ob γAttributHuelle((F(ΨΓ))(Ψ(Γ{γ})),Ψ) ist. Falls dies zutrifft, kann γ aus Γ entfernt werden. Hierbei handelt es sich um ein iteratives Verfahren, d. h. F enthält in jedem Schritt die bereits in vorherigen Schritten aktualisierten Abhängigkeiten.

An obigem Beispiel:

  • AB,E
  • AB,D
  • FC,D
  • CDB,E,F
  • FB_

In der fünften funktionalen Abhängigkeit fällt das B weg.

  • AE
  • AB,D
  • FC,D
  • CDE,F

3. Schritt: Leere Klauseln

Eliminiere Klauseln der Form Ψ

Im Beispiel aus Schritt 2 gibt es keine Abhängigkeiten mit leerer rechter Seite. Also gibt es in diesem Fall hier nichts zu tun.

4. Schritt: Zusammenfassen

Fasse Formeln ab0,ab1 zu ab0b1 zusammen.

Im Beispiel fassen wir nun Ausdrücke mit gleicher linker Seite zusammen:

  • AE,B,D
  • FC,D
  • CDB,E,F

Neues Relationenschema

Aus allen ΨΓ wird R(Ψ,Γ).

Zusätzlich muss ein neuer Schlüssel gefunden werden. Gegebenenfalls muss eine neue Relation erzeugt werden. Überflüssige Relationen können gestrichen werden, wenn diese in anderen enthalten sind.

Am Beispiel:

  • R1(A_,B,D,E) # A ist Primärschlüssel
  • R2(C,D,F_) # F ist Primärschlüssel
  • R3(B,C,D_,E,F) # CD ist Primärschlüssel (Die Elemente dieser Relation sind zwar schon durch R1 und R2 gegeben, jedoch muss zur Abhängigkeitserhaltung diese weiterhin aufgeführt werden, es dürfte nur entfernt werden, wenn eine Relation vollends in einer anderen enthalten wäre. Dies ist jedoch nicht möglich, da diese Fälle vorher durch die Links- und Rechtsreduktion entfernt wurden.)

Hinzufügen einer Relation

Nun muss durch Hinzunahme einer Relation eine Beziehung zwischen R1, R2 und R3 hergestellt werden. Das wird durch eine Relation R4 ermöglicht, die nur den Ursprungsschlüssel AF enthält (beachte, dass AF+={A,B,C,D,E,F} ist). Wir erhalten ein Schema in der 3. Normalform wie folgt:

  • R1(A_,B,D,E)
  • R2(C,D,F_)
  • R3(B,C,D_,E,F)
  • R4(A_,C_), wobei A und C jeweils Fremdschlüssel darstellen und zusammengenommen den Primärschlüssel von R4 erzeugen.

Formaler Algorithmus

Eingabe: universelles Schema R=(U,F)
Ausgabe: 3. Normalform D von R

B:=reduction(F)
R:=
i:=0
𝐟𝐨𝐫𝐞𝐚𝐜𝐡YU𝐰𝐡𝐞𝐫𝐞AU.(YA)B
i:=i+1
Xi:=Y{AU|(YA)B}
Ri:=(Xi,ΠXi(B))
R:=R{Ri}
𝐢𝐟RiR.(XiU)B+
i:=i+1
R:=R{Ri}
D:=(R,)

Einzelnachweise

  1. A. Kemper, A. Eickler: Datenbanksysteme, ISBN 3-486-57690-9.

https://normalizer.db.in.tum.de/index.py