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 → ChefNamePersNr → Name, Fachgebiet, ChefPersNr, ChefNameMatrNr → 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 → ChefNamePersNr → Name, Fachgebiet, ChefPersNr, ChefNameMatrNr → 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 → ChefNamePersNr → Name, Fachgebiet, ChefPersNr, ChefNameMatrNr → 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:
ChefNamewird bereits durchChefPersNrbestimmt (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,ChefNamewerden durchPersNrundChefPersNrbereits bestimmt.
- Reduziert zu:
Ergebnis nach Rechtsreduktion:
ChefPersNr → ChefNamePersNr → Name, Fachgebiet, ChefPersNrMatrNr → 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:
ChefPersNrverweist auf Chef
- Attribute:
-
Student
- Attribute:
MatrNr,PersNr,StudName,Semester,StudWohnOrt - Funktionale Abhängigkeit:
MatrNr → PersNr, StudName, Semester, StudWohnOrt - Primärschlüssel:
- Fremdschlüssel:
PersNrverweist 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:
ChefPersNrverweist auf Chef
-
Student
- Attribute:
- Primärschlüssel:
- Fremdschlüssel:
PersNrverweist 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.
15wird als Wurzel eingefügt.
2. Einfügen von 8
[8, 15]
8wird vor15eingefügt. Keine Notwendigkeit zum Split.
3. Einfügen von 2
[2, 8, 15]
2wird vor8eingefügt. Knoten erreicht maximale Kapazität (3 Schlüssel).
4. Einfügen von 9
- Der Knoten
[2, 8, 15]ist voll. Einfügen von9führt zu einem Split.
Split-Vorgang:
- Mittlerer Schlüssel
8wird zur neuen Wurzel. - Links:
[2] - Rechts:
[9, 15]
[8]
/ \
[2] [9, 15]
5. Einfügen von 17
[8]
/ \
[2] [9, 15, 17]
17wird in den rechten Knoten eingefügt. Knoten[9, 15, 17]ist nun voll.
6. Einfügen von 5
[8]
/ \
[2, 5] [9, 15, 17]
5wird in den linken Knoten eingefügt. Kein Split notwendig.
7. Einfügen von 11
- Der rechte Knoten
[9, 15, 17]ist voll. Einfügen von11führt zu einem Split.
Split-Vorgang:
- Mittlerer Schlüssel
15wird 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]
19wird 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)
20wird 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)
3wird 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
8ist 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
8durch9.
[15]
/ \
[3,9] [19]
/ | \ / \
[2][5][11][17][20]
2. Löschen von 17
17ist 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:
10ist nicht im Baum vorhanden. Daher bleibt der Baum unverändert.
[15]
/ \
[3,9] [19,20]
/ | \
[2][5][11]
- Keine Änderung, da
10nicht 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 .