Aufgabe 10-1 Synthesealgorithmus
Aufgabenstellung
Gegeben sei das folgende Relationsschema:
AssistentProfessorDiplomand
PersNr
← Personalnummer des AssistentenName
← Name des AssistentenFachgebiet
← Fachgebiet des AssistentenChefPersNr
← Personalnummer des ProfessorsChefName
← Name des ProfessorsMatrNr
← Matrikelnummer des StudentenStudName
← Name des StudentenSemester
← Fachsemester des StudentenStudWohnOrt
← Wohnort des Studenten
Die Relation AssistentProfessorDiplomand enthält die Daten von Studierenden, deren Diplomarbeit von einem Assistenten betreut wird, welcher wiederum bei einem bestimmten Professor angestellt ist.
Gegeben seien folgende funktionale Abhängigkeiten:
ChefPersNr → ChefName
PersNr → Name, Fachgebiet, ChefPersNr, ChefName
MatrNr → PersNr, Name, Fachgebiet, ChefPersNr, ChefName, StudName, Semester, StudWohnOrt
a) Bestimmen Sie alle Schlüsselkandidaten.
MatrNr ist der einzige Schlüsselkandidat, da man damit alle Attribute erreichen kann. ChefPersNr und PersNr sind nicht eindeutig
b) Überführen Sie das Relationsschema mit Hilfe des Synthesealgorithmus in die 3. Normalform.
Erinnerung
Schritte des Synthesealgorithmus:
- Linksreduktion
- Rechtsreduktion
- Entfernung von rechtsleeren Abhängigkeiten
- Zusammenfassen von Abhängigkeiten mit gleicher linker Seite
- Neues Relationsschema erzeugen
- Rekonstruktion eines Schlüsselkandidaten:
- Elimination überflüssiger Relationen
Schritt-für-Schritt Anwendung
1. Linksreduktion
Ziel: Reduzierung der linken Seiten der funktionalen Abhängigkeiten auf minimale Attribute.
Gegebene funktionale Abhängigkeiten:
ChefPersNr → ChefName
PersNr → Name, Fachgebiet, ChefPersNr, ChefName
MatrNr → PersNr, Name, Fachgebiet, ChefPersNr, ChefName, StudName, Semester, StudWohnOrt
Analyse:
- Alle linken Seiten bestehen bereits aus einzelnen Attributen.
Ergebnis:
Keine Änderungen erforderlich.
2. Rechtsreduktion
Ziel: Reduzierung der rechten Seiten der funktionalen Abhängigkeiten auf minimale Attribute.
Funktionale Abhängigkeiten nach Linksreduktion:
ChefPersNr → ChefName
PersNr → Name, Fachgebiet, ChefPersNr, ChefName
MatrNr → PersNr, Name, Fachgebiet, ChefPersNr, ChefName, StudName, Semester, StudWohnOrt
Reduzierung:
-
ChefPersNr → ChefName
- Keine Änderungen nötig.
-
PersNr → Name, Fachgebiet, ChefPersNr, ChefName
- Reduziert zu:
PersNr → Name, Fachgebiet, ChefPersNr
- Begründung:
ChefName
wird bereits durchChefPersNr
bestimmt (ChefPersNr → ChefName
).
- Reduziert zu:
-
MatrNr → PersNr, Name, Fachgebiet, ChefPersNr, ChefName, StudName, Semester, StudWohnOrt
- Reduziert zu:
MatrNr → PersNr, StudName, Semester, StudWohnOrt
- Begründung:
Name
,Fachgebiet
,ChefPersNr
,ChefName
werden durchPersNr
undChefPersNr
bereits bestimmt.
- Reduziert zu:
Ergebnis nach Rechtsreduktion:
ChefPersNr → ChefName
PersNr → Name, Fachgebiet, ChefPersNr
MatrNr → PersNr, StudName, Semester, StudWohnOrt
3. Entfernung von rechtsleeren Abhängigkeiten
Ziel: Entfernen von Abhängigkeiten, bei denen die rechte Seite leer ist.
Analyse:
Keine der funktionalen Abhängigkeiten hat eine leere rechte Seite.
Ergebnis:
Keine Änderungen erforderlich.
4. Zusammenfassen von Abhängigkeiten mit gleicher linker Seite
Ziel: Kombinieren von funktionalen Abhängigkeiten, die dieselbe linke Seite haben.
Analyse:
Keine zwei Abhängigkeiten teilen dieselbe linke Seite.
Ergebnis:
Keine Änderungen erforderlich.
5. Erzeugung neuer Relationen
Basierend auf den reduzierten funktionalen Abhängigkeiten werden neue Relationen erstellt:
-
Chef
- Attribute:
ChefPersNr
,ChefName
- Funktionale Abhängigkeit:
ChefPersNr → ChefName
- Primärschlüssel:
- Attribute:
-
Assistent
- Attribute:
PersNr
,Name
,Fachgebiet
,ChefPersNr
- Funktionale Abhängigkeit:
PersNr → Name, Fachgebiet, ChefPersNr
- Primärschlüssel:
- Fremdschlüssel:
ChefPersNr
verweist auf Chef
- Attribute:
-
Student
- Attribute:
MatrNr
,PersNr
,StudName
,Semester
,StudWohnOrt
- Funktionale Abhängigkeit:
MatrNr → PersNr, StudName, Semester, StudWohnOrt
- Primärschlüssel:
- Fremdschlüssel:
PersNr
verweist auf Assistent
- Attribute:
6. Rekonstruktion eines Schlüsselkandidaten
Ziel: Sicherstellen, dass der Schlüsselkandidat der ursprünglichen Relation im neuen Schema erhalten bleibt.
Schlüsselkandidat der ursprünglichen Relation: MatrNr
Rekonstruktion:
Die Relation Student enthält MatrNr
als Primärschlüssel, der alle erforderlichen Attribute bestimmt. Somit ist der Schlüsselkandidat im neuen Schema erhalten.
7. Elimination überflüssiger Relationen
Ziel: Entfernen von Relationen, die redundant sind.
Analyse:
Alle erstellten Relationen sind notwendig, um die funktionalen Abhängigkeiten und die Datenintegrität zu gewährleisten.
Ergebnis:
Keine Relationen werden eliminiert.
Finales Relationsschema in der 3. Normalform
Nach Anwendung des Synthesealgorithmus ergibt sich das folgende Relationsschema in der 3. Normalform:
-
Chef
- Attribute:
- Primärschlüssel:
-
Assistent
- Attribute:
- Primärschlüssel:
- Fremdschlüssel:
ChefPersNr
verweist auf Chef
-
Student
- Attribute:
- Primärschlüssel:
- Fremdschlüssel:
PersNr
verweist auf Assistent
Vorteile dieser Struktur
-
Redundanzfreiheit:
- Jede Information wird nur einmal gespeichert, was Speicherplatz spart und die Datenkonsistenz erhöht.
-
Vermeidung von Anomalien:
- Einfügeanomalie: Neue Daten können eingefügt werden, ohne dass unnötige oder unvollständige Daten entstehen.
- Änderungsanomalie: Änderungen an Daten müssen nur an einer Stelle vorgenommen werden.
- Löschanomalie: Das Löschen von Daten führt nicht zum Verlust anderer, unabhängiger Daten.
-
Klarheit und Struktur:
- Jede Relation hat einen klar definierten Zweck und eine eindeutige Schlüsselstruktur, was die Wartung und das Verständnis der Datenbank erleichtert.
Aufgabe 10-2 B-Baum
a) Definieren Sie einen B-Baum mit dem Grad . Erklären Sie, was dies in Bezug auf die minimale und maximale Anzahl von Schlüsseln in den Knoten und die Anzahl möglicher Kinder bedeutet.
Ein B-Baum mit dem Grad erfüllt die folgenden Eigenschaften:
- Minimale Anzahl von Schlüsseln pro Knoten: Jeder Knoten (außer der Wurzel) muss mindestens Schlüssel enthalten.
- Maximale Anzahl von Schlüsseln pro Knoten: Jeder Knoten kann höchstens Schlüssel enthalten.
- Anzahl der Kinder: Ein Knoten mit Schlüsseln hat genau Kinder.
- Minimale Anzahl von Kindern: Jeder Knoten (außer den Blättern) muss mindestens Kinder haben.
- Maximale Anzahl von Kindern: Jeder Knoten kann höchstens Kinder haben.
Diese Definition stellt sicher, dass der Baum stets balanciert bleibt und Operationen wie Einfügen und Löschen effizient durchgeführt werden können.
b) Fügen Sie in einen anfangs leeren B-Baum mit dem Grad der Reihe nach die folgenden Schlüssel ein:
15, 8, 2, 9, 17, 5, 11, 19, 20, 3
- Zeigen Sie nach jedem Einfügevorgang den B-Baum (Diagramm oder Textstruktur) und erläutern Sie eventuelle Knoten-Splits.
1. Einfügen von 15
[15]
- Der Baum ist leer.
15
wird als Wurzel eingefügt.
2. Einfügen von 8
[8, 15]
8
wird vor15
eingefügt. Keine Notwendigkeit zum Split.
3. Einfügen von 2
[2, 8, 15]
2
wird vor8
eingefügt. Knoten erreicht maximale Kapazität (3 Schlüssel).
4. Einfügen von 9
- Der Knoten
[2, 8, 15]
ist voll. Einfügen von9
führt zu einem Split.
Split-Vorgang:
- Mittlerer Schlüssel
8
wird zur neuen Wurzel. - Links:
[2]
- Rechts:
[9, 15]
[8]
/ \
[2] [9, 15]
5. Einfügen von 17
[8]
/ \
[2] [9, 15, 17]
17
wird in den rechten Knoten eingefügt. Knoten[9, 15, 17]
ist nun voll.
6. Einfügen von 5
[8]
/ \
[2, 5] [9, 15, 17]
5
wird in den linken Knoten eingefügt. Kein Split notwendig.
7. Einfügen von 11
- Der rechte Knoten
[9, 15, 17]
ist voll. Einfügen von11
führt zu einem Split.
Split-Vorgang:
- Mittlerer Schlüssel
15
wird nach oben verschoben. - Links:
[9, 11]
- Rechts:
[17]
[8, 15]
/ | \
[2,5] [9,11] [17]
8. Einfügen von 19
[8, 15]
/ | \
[2,5] [9,11] [17,19]
19
wird in den rechten Knoten eingefügt. Kein Split notwendig.
9. Einfügen von 20
[8, 15]
/ | \
[2,5] [9,11] [17,19,20] → Split (Schlüssel 19 wird zur Wurzel)
20
wird in den rechten Knoten eingefügt. Knoten[17,19,20]
ist nun voll.
[15]
/ \
[8] [19]
/ \ / \
[2,5][9,11][17][20]
10. Einfügen von 3
- Der linke Knoten
[2,5]
kann noch einen Schlüssel aufnehmen.
[15]
/ \
[8] [19]
/ \ / \
[2,3,5][9,11][17][20] → Split (Schlüssel 3 wird zum Elternknoten)
3
wird in den linken Knoten eingefügt. Knoten[2,3,5]
ist nun voll.
[15]
/ \
[3,8] [19]
/ | \ / \
[2][5][9,11][17][20]
c) Löschen Sie aus dem resultierenden B-Baum nacheinander die Schlüssel 8, 17, 10
. Zeigen Sie Schritt für Schritt, wie sich der Baum nach jedem Löschvorgang verändert.
Wir löschen die Schlüssel nacheinander und zeigen die Veränderungen des B-Baums nach jedem Löschvorgang.
Ausgangsbaum vor Löschungen
[15]
/ \
[3,8] [19]
/ | \ / \
[2][5][9,11][17][20]
1. Löschen von 8
8
ist ein Schlüssel in der inneren Knoten. Wir müssen einen Ersatz finden, entweder den Vorgänger oder Nachfolger.
Ersatz durch den Nachgänger 9
:
- Ersetze
8
durch9
.
[15]
/ \
[3,9] [19]
/ | \ / \
[2][5][11][17][20]
2. Löschen von 17
17
ist ein Schlüssel in der rechten Blattknoten[17,19,20]
. Entfernen von17
.
[15]
/ \
[3,9] [19,20]
/ | \
[2][5][11]
- Der rechte Knoten hat nun
[19,20]
, was mindestens die minimale Anzahl von Schlüsseln (1) erfüllt. Kein Umbalancieren nötig.
3. Löschen von 10
- Hinweis:
10
ist nicht im Baum vorhanden. Daher bleibt der Baum unverändert.
[15]
/ \
[3,9] [19,20]
/ | \
[2][5][11]
- Keine Änderung, da
10
nicht existiert.
Zusammenfassung
Nach allen Einfügungen und Löschungen ist der finale B-Baum wie folgt strukturiert:
[15]
/ \
[3,9] [19,20]
/ | \
[2][5][11]
Dieser Baum erfüllt weiterhin die Eigenschaften eines B-Baums mit Grad .