Aufgabe 1)
Relationale DatenbankmodelleDas relationale Datenbankmodell wird verwendet, um Daten strukturiert in Form von Tabellen (Relationen), Spalten (Attribute) und Zeilen (Tupel) zu speichern und abzufragen. Diese Struktur basiert auf der mathematischen Theorie der Relationen.Wichtige Konzepte beinhalten:
- Schlüsselkriterien: Primärschlüssel und Fremdschlüssel
- Mengenoperationen: Projektion, Selektion, Joins und Vereinigungen
- Datenintegrität: Wird durch Constraints (Einschränkungen) sichergestellt
- SQL: Structured Query Language, um Daten abzufragen und zu manipulieren
a)
Erstelle das relationale Schema anhand folgender Informationen:
- Kunde(Kundennummer (Primärschlüssel), Name, Adresse)
- Produkt(Produktnummer (Primärschlüssel), Produktname, Preis)
- Bestellung(Bestellnummer (Primärschlüssel), Kundennummer (Fremdschlüssel), Bestelldatum, Gesamtbetrag)
- Bestellposition(Positionsnummer (Primärschlüssel), Bestellnummer (Fremdschlüssel), Produktnummer (Fremdschlüssel), Menge)
Lösung:
Relationale DatenbankmodelleDas relationale Datenbankmodell wird verwendet, um Daten strukturiert in Form von Tabellen (Relationen), Spalten (Attribute) und Zeilen (Tupel) zu speichern und abzufragen. Diese Struktur basiert auf der mathematischen Theorie der Relationen. Wichtige Konzepte beinhalten:
- Schlüsselkriterien: Primärschlüssel und Fremdschlüssel
- Mengenoperationen: Projektion, Selektion, Joins und Vereinigungen
- Datenintegrität: Wird durch Constraints (Einschränkungen) sichergestellt
- SQL: Structured Query Language, um Daten abzufragen und zu manipulieren
Lösung des Teilübungsaufgabe:Erstelle das relationale Schema anhand folgender Informationen:
- Kunde(Kundennummer (Primärschlüssel), Name, Adresse)
- Produkt(Produktnummer (Primärschlüssel), Produktname, Preis)
- Bestellung(Bestellnummer (Primärschlüssel), Kundennummer (Fremdschlüssel), Bestelldatum, Gesamtbetrag)
- Bestellposition(Positionsnummer (Primärschlüssel), Bestellnummer (Fremdschlüssel), Produktnummer (Fremdschlüssel), Menge)
Relationales Schema:- Kunde(Kundennummer PK, Name, Adresse)
- Produkt(Produktnummer PK, Produktname, Preis)
- Bestellung(Bestellnummer PK, Kundennummer FK, Bestelldatum, Gesamtbetrag)
- Bestellposition(Positionsnummer PK, Bestellnummer FK, Produktnummer FK, Menge)
Die Abkürzungen
PK stehen für Primärschlüssel und
FK für Fremdschlüssel.
b)
Schreibe eine SQL-Abfrage, die die Namen aller Kunden und deren Bestellnummern anzeigt, die Produkte mit einem Preis von mehr als 100 € bestellt haben.
Lösung:
Relationale DatenbankmodelleDas relationale Datenbankmodell wird verwendet, um Daten strukturiert in Form von Tabellen (Relationen), Spalten (Attribute) und Zeilen (Tupel) zu speichern und abzufragen. Diese Struktur basiert auf der mathematischen Theorie der Relationen.Wichtige Konzepte beinhalten:
- Schlüsselkriterien: Primärschlüssel und Fremdschlüssel
- Mengenoperationen: Projektion, Selektion, Joins und Vereinigungen
- Datenintegrität: Wird durch Constraints (Einschränkungen) sichergestellt
- SQL: Structured Query Language, um Daten abzufragen und zu manipulieren
Lösung des Teilübung:Schreibe eine SQL-Abfrage, die die Namen aller Kunden und deren Bestellnummern anzeigt, die Produkte mit einem Preis von mehr als 100 € bestellt haben.
SQL-Abfrage:SELECT K.Name, B.BestellnummerFROM Kunde KJOIN Bestellung B ON K.Kundennummer = B.KundennummerJOIN Bestellposition BP ON B.Bestellnummer = BP.BestellnummerJOIN Produkt P ON BP.Produktnummer = P.ProduktnummerWHERE P.Preis > 100;
Diese SQL-Abfrage verbindet die Tabellen
Kunde,
Bestellung,
Bestellposition und
Produkt über ihre jeweiligen Fremdschlüssel. Sie filtert nur die Produkte, deren Preis mehr als 100 € beträgt und gibt die Namen der Kunden und deren Bestellnummern zurück.
c)
Erläutere das Konzept der Referenziellen Integrität. Wie wird sie in relationalen Datenbanken durch Fremdschlüssel implementiert?
Lösung:
Relationale DatenbankmodelleDas relationale Datenbankmodell wird verwendet, um Daten strukturiert in Form von Tabellen (Relationen), Spalten (Attribute) und Zeilen (Tupel) zu speichern und abzufragen. Diese Struktur basiert auf der mathematischen Theorie der Relationen.Wichtige Konzepte beinhalten:
- Schlüsselkriterien: Primärschlüssel und Fremdschlüssel
- Mengenoperationen: Projektion, Selektion, Joins und Vereinigungen
- Datenintegrität: Wird durch Constraints (Einschränkungen) sichergestellt
- SQL: Structured Query Language, um Daten abzufragen und zu manipulieren
Lösung des Teilübung:Konzept der Referenziellen Integrität:Referenzielle Integrität ist ein fundamentales Konzept in relationalen Datenbanken, das sicherstellt, dass Beziehungen zwischen Tabellen korrekt und konsistent bleiben. Sie wird durch Regeln und Einschränkungen durchgesetzt, die verhindern, dass Fremdschlüssel auf nicht existierende Datensätze verweisen.
- Fremdschlüssel: Ein Fremdschlüssel in einer Tabelle ist ein Attribut oder eine Kombination von Attributen, das auf einen Primärschlüssel in einer anderen Tabelle verweist. Er stellt sicher, dass jede fremdschlüsselbasierte Verweisbeziehung gültig ist.
Die referenzielle Integrität stellt sicher, dass:
- Ein Datensatz in der Referenztabelle existiert, bevor ein neuer Datensatz mit dem Fremdschlüssel in der verweisenden Tabelle eingefügt wird.
- Ein Datensatz in der Referenztabelle nicht gelöscht werden kann, wenn verweisende Datensätze in anderen Tabellen existieren. Dies kann durch Einschränkungen wie ON DELETE RESTRICT oder ON DELETE CASCADE implementiert werden.
- Ein Datensatz in der Referenztabelle nicht aktualisiert werden kann, wenn verweisende Datensätze in anderen Tabellen existieren, es sei denn, die Aktualisierung wird kaskadiert. Dies kann durch Einschränkungen wie ON UPDATE RESTRICT oder ON UPDATE CASCADE implementiert werden.
Durch den Einsatz von Fremdschlüsseln wird referenzielle Integrität in relationalen Datenbanken gewährleistet. Diese Alarmregeln stellen sicher, dass Beziehungen zwischen Tabellen bestehen bleiben und die Datenintegrität aufrechterhalten wird.
Beispiel:CREATE TABLE Kunde ( Kundennummer INT PRIMARY KEY, Name VARCHAR(255), Adresse VARCHAR(255));CREATE TABLE Bestellung ( Bestellnummer INT PRIMARY KEY, Kundennummer INT, Bestelldatum DATE, Gesamtbetrag DECIMAL(10, 2), FOREIGN KEY (Kundennummer) REFERENCES Kunde(Kundennummer) ON DELETE RESTRICT ON UPDATE CASCADE);
d)
Berechne die Menge der Bestellungen, bei denen der Gesamtbetrag mehr als 500 € beträgt, unter Nutzung der folgenden SQL-Daten:
'create table Bestellung (Bestellnummer int primary key, Kundennummer int, Bestelldatum date, Gesamtbetrag float, foreign key (Kundennummer) references Kunde(Kundennummer));'
Inkludiere eine SQL-Abfrage, um die Berechnung durchzuführen.
Lösung:
Relationale DatenbankmodelleDas relationale Datenbankmodell wird verwendet, um Daten strukturiert in Form von Tabellen (Relationen), Spalten (Attribute) und Zeilen (Tupel) zu speichern und abzufragen. Diese Struktur basiert auf der mathematischen Theorie der Relationen.Wichtige Konzepte beinhalten:
- Schlüsselkriterien: Primärschlüssel und Fremdschlüssel
- Mengenoperationen: Projektion, Selektion, Joins und Vereinigungen
- Datenintegrität: Wird durch Constraints (Einschränkungen) sichergestellt
- SQL: Structured Query Language, um Daten abzufragen und zu manipulieren
Lösung des Teilübung:Berechnung der Menge der Bestellungen mit einem Gesamtbetrag von mehr als 500 €:Die erforderliche SQL-Abfrage zu dieser Berechnung lautet:
SELECT COUNT(*) as AnzahlDerBestellungen FROM Bestellung WHERE Gesamtbetrag > 500;
Diese SQL-Abfrage zählt alle Bestellungen in der Tabelle Bestellung, bei denen der Gesamtbetrag mehr als 500 € beträgt.
SQL-Daten:CREATE TABLE Bestellung ( Bestellnummer INT PRIMARY KEY, Kundennummer INT, Bestelldatum DATE, Gesamtbetrag FLOAT, FOREIGN KEY (Kundennummer) REFERENCES Kunde(Kundennummer));
Aufgabe 2)
Datenbank Normalisierung: Angenommen, Du wirst mit einer nicht normalisierten Tabelle namens Student_Kurs in einer Datenbank konfrontiert. Die Tabelle sieht wie folgt aus:
'StudentenID Student_Name Kurs_ID Kurs_Name Dozent_Name Note 1 Maria Meyer 101 DBSysteme Dr. Müller 1.3 2 Hans Schmidt 102 ALgorithmen Prof. Keller 2.0 2 Hans Schmidt 101 DBSysteme Dr. Müller 1.7 3 Paula Becker 103 Mathe Prof. Weber 3.0 4 Markus Braun 104 Physik Prof. Meier 2.7'
a)
a. Identifiziere die verschiedenen Anomalien, die in der gegebenen nicht normalisierten Student_Kurs Tabelle auftreten können. Nenne mindestens drei Anomalien. Lösung:
- a. Identifiziere die verschiedenen Anomalien, die in der gegebenen nicht normalisierten Student_Kurs Tabelle auftreten können. Nenne mindestens drei Anomalien.
- Einfügeanomalie: Es ist schwer, einen neuen Kurs hinzuzufügen, wenn aktuell kein Student diesen belegt. Um zum Beispiel einen neuen Kurs in die Datenbank aufzunehmen, müsste ein Student gleichzeitig hinzugefügt werden, da alle Informationen innerhalb einer Tabelle gespeichert sind.
- Löschanomalie: Wenn ein Kurs gelöscht wird und der Student diesen Kurs gleichzeitig nicht mehr belegt, könnten dabei wertvolle Informationen verloren gehen. Zum Beispiel wird ein Kurs gelöscht, den nur ein einziger Student belegt hat. Dadurch gehen auch alle Informationen über diesen Kurs verloren.
- Update-Anomalie: Änderungen an Daten müssen an mehreren Stellen durchgeführt werden, was den Aufwand und die Gefahr von Inkonsistenzen erhöht. Beispielsweise, wenn der Name eines Dozenten geändert werden muss, muss dies in jeder Zeile, die diesen Dozenten enthält, manuell geändert werden. Wenn eine der Änderungen übersehen wird, führt dies zu inkonsistenten Daten.
b)
b. Wandle die Student_Kurs Tabelle in die 1. Normalform (1NF) um. Erkläre die Schritte, die Du unternommen hast, um die 1. NF zu erreichen. Lösung:
- b. Wandle die Student_Kurs Tabelle in die 1. Normalform (1NF) um. Erkläre die Schritte, die Du unternommen hast, um die 1. NF zu erreichen.
- Schritte zur Erreichung der 1. Normalform (1NF):
- Definition: Eine Tabelle ist in der 1. Normalform, wenn: - Alle Einträge in einer Spalte atomar sind (keine Mehrfachwerte oder verschachtelte Datensätze).- Jede Zeile eindeutig identifizierbar ist.
- Analyse der gegebenen Tabelle: Die Tabelle Student_Kurs hat bereits atomare Werte in jeder Spalte; es gibt keine Mehrfachwerte oder verschachtelte Datensätze.
- Prüfung der Identifikation: In der gegebenen Tabelle kann die Kombination aus StudentenID und Kurs_ID als Primärschlüssel verwendet werden, um jede Zeile eindeutig zu identifizieren. Das heißt, die Tabelle hat bereits einen zusammengesetzten Schlüssel.
- Finale Tabelle in 1NF:
'StudentenID Student_Name Kurs_ID Kurs_Name Dozent_Name Note 1 Maria Meyer 101 DBSysteme Dr. Müller 1.3 2 Hans Schmidt 102 ALgorithmen Prof. Keller 2.0 2 Hans Schmidt 101 DBSysteme Dr. Müller 1.7 3 Paula Becker 103 Mathe Prof. Weber 3.0 4 Markus Braun 104 Physik Prof. Meier 2.7'
- Da keine Mehrfachwerte oder verschachtelten Datensätze vorhanden sind und jede Zeile eindeutig durch die Kombination von StudentenID und Kurs_ID identifiziert werden kann, erfüllt die Tabelle die Kriterien der 1. Normalform (1NF).
c)
c. Überführe die Tabelle aus 1. NF in die zweite Normalform (2NF) und schließlich in die dritte Normalform (3NF). Zeige alle Zwischenschritte und erläutere, wie sich die Konstrukte der partiellen und transitiven Abhängigkeiten in Deiner finalen Tabellenstruktur widerspiegeln. Lösung:
- c. Überführe die Tabelle aus 1. NF in die zweite Normalform (2NF) und schließlich in die dritte Normalform (3NF). Zeige alle Zwischenschritte und erläutere, wie sich die Konstrukte der partiellen und transitiven Abhängigkeiten in Deiner finalen Tabellenstruktur widerspiegeln.
- 1. Normalform (1NF): Die Tabelle aus 1NF wurde bereits in der vorherigen Teilaufgabe beibehalten:
'StudentenID Student_Name Kurs_ID Kurs_Name Dozent_Name Note 1 Maria Meyer 101 DBSysteme Dr. Müller 1.3 2 Hans Schmidt 102 ALgorithmen Prof. Keller 2.0 2 Hans Schmidt 101 DBSysteme Dr. Müller 1.7 3 Paula Becker 103 Mathe Prof. Weber 3.0 4 Markus Braun 104 Physik Prof. Meier 2.7'
- 2. Normalform (2NF): Eine Tabelle befindet sich in der 2NF, wenn sie in der 1NF ist und keine partiellen Abhängigkeiten mehr aufweist (alle Nicht-Schlüssel-Attribute sind vollständig funktional abhängig von jedem Kandidatenschlüssel). In der aktuellen Tabelle gibt es partielle Abhängigkeiten, da Student_Name teilweise abhängig von StudentenID ist und die Felder Kurs_Name und Dozent_Name teilweise von Kurs_ID abhängen. Um dies zu erreichen, müssen wir die Tabelle aufteilen.
- Schritt 1: Erstelle eine Tabelle Studenten:
'StudentenID Student_Name 1 Maria Meyer 2 Hans Schmidt 3 Paula Becker 4 Markus Braun'
- Schritt 2: Erstelle eine Tabelle Kurse:
'Kurs_ID Kurs_Name Dozent_Name 101 DBSysteme Dr. Müller 102 ALgorithmen Prof. Keller 103 Mathe Prof. Weber 104 Physik Prof. Meier'
- Schritt 3: Erstelle eine Tabelle Student_Kurs für die Zuordnungen:
'StudentenID Kurs_ID Note 1 101 1.3 2 102 2.0 2 101 1.7 3 103 3.0 4 104 2.7'
- Nun sind wir in der 2NF, da alle Nicht-Schlüssel-Attribute vollständig abhängig sind von jedem Kandidatenschlüssel.
- 3. Normalform (3NF): Eine Tabelle befindet sich in der 3NF, wenn sie in der 2NF ist und keine transitiven Abhängigkeiten aufweist (Nicht-Schlüssel-Attribute sind nur von Kandidatenschlüsseln abhängig).
- In unserem Fall gibt es bereits keine transitiven Abhängigkeiten, da alle Nicht-Schlüssel-Attribute direkt von den Primärschlüsseln abhängen. Somit sind wir bereits in der 3NF.
- Zusammenfassung der finalen Tabellenstruktur in 3NF:
'StudentenID Student_Name 1 Maria Meyer 2 Hans Schmidt 3 Paula Becker 4 Markus Braun'
'Kurs_ID Kurs_Name Dozent_Name 101 DBSysteme Dr. Müller 102 ALgorithmen Prof. Keller 103 Mathe Prof. Weber 104 Physik Prof. Meier'
'StudentenID Kurs_ID Note 1 101 1.3 2 102 2.0 2 101 1.7 3 103 3.0 4 104 2.7'
Aufgabe 3)
In Deiner Datenbank betreibst Du eine Online-Buchhandlung. Du hast die folgenden Tabellen:
- Books: Enthält Informationen über Bücher
- book_id (INT)
- title (VARCHAR)
- author_id (INT)
- price (FLOAT)
- Authors: Enthält Informationen über Autoren
- author_id (INT)
- name (VARCHAR)
- country (VARCHAR)
- Sales: Enthält Informationen über Buchverkäufe
- sale_id (INT)
- book_id (INT)
- sale_date (DATE)
- quantity (INT)
Du möchtest nun verschiedene Analysen und Abfragen durchführen, um Einblicke in Deine Buchgeschäftsdaten zu erhalten.
a)
Schreibe eine SQL-Abfrage, die die Namen aller Autoren und die Titel ihrer Bücher zurückgibt. Verwende dabei einen INNER JOIN, um die Tabellen Books und Authors miteinander zu verbinden.
Lösung:
Die folgende SQL-Abfrage zeigt die Namen aller Autoren zusammen mit den Titeln der von ihnen geschriebenen Bücher. Dabei wird ein INNER JOIN verwendet, um die Tabellen Books und Authors miteinander zu verbinden:
SELECT Authors.name, Books.title FROM Books INNER JOIN Authors ON Books.author_id = Authors.author_id;
b)
Erstelle eine SQL-Abfrage, die die Gesamtanzahl der verkauften Exemplare jedes Buches anzeigt, dessen Preis über dem durchschnittlichen Buchpreis liegt. Verwende dabei eine Subquery, um den durchschnittlichen Buchpreis zu berechnen.
Lösung:
Um die Gesamtanzahl der verkauften Exemplare jedes Buches anzuzeigen, dessen Preis über dem durchschnittlichen Buchpreis liegt, können wir eine SQL-Abfrage mit einer Subquery verwenden. Die Subquery berechnet dabei den durchschnittlichen Buchpreis, und die Hauptabfrage zählt die Verkäufe der Bücher, deren Preis über diesem Durchschnitt liegt.
SELECT Books.title, SUM(Sales.quantity) AS total_quantity_sold FROM Books INNER JOIN Sales ON Books.book_id = Sales.book_id WHERE Books.price > (SELECT AVG(price) FROM Books)GROUP BY Books.title;
Aufgabe 4)
In einer Datenbank werden die ACID-Prinzipien verwendet, um die Zuverlässigkeit von Datenbanktransaktionen sicherzustellen. Diese Prinzipien umfassen:
- Atomicity: Transaktionen sind unteilbar (alles oder nichts).
- Consistency: Transaktionen führen die Datenbank von einem konsistenten Zustand in einen anderen.
- Isolation: Transaktionen sind voneinander unabhängig.
- Durability: Einmal abgeschlossene Transaktionen bleiben dauerhaft gespeichert.
a)
Du hast eine Datenbank eines Online-Shops, die Bestellungen und Lagerbestände verwaltet. Erläutere anhand eines Beispiels, wie das Prinzip der Atomizität sicherstellt, dass entweder alle Änderungen einer Kundenbestellung durchgeführt werden oder keine. Verwende dabei das Szenario einer Bestellung, bei der das System die Lagerbestände aktualisieren muss.
Lösung:
In einer Datenbank eines Online-Shops wird das Prinzip der Atomizität verwendet, um sicherzustellen, dass Transaktionen unteilbar sind, also entweder vollständig ausgeführt werden oder gar nicht. Schauen wir uns ein Beispiel an, bei dem eine Kundenbestellung sowohl die Bestellinformationen als auch die Lagerbestände aktualisieren muss.
- Szenario: Ein Kunde bestellt ein Produkt, das im Lager verfügbar ist.
- Transaktionsschritte:
- 1. Die Bestellung wird in der Datenbank erstellt und die Bestellinformationen (z.B. Anzahl und Kundendaten) werden gespeichert.
- 2. Der Lagerbestand des bestellten Produkts wird um die bestellte Menge reduziert.
- Atomizität gewährt: Das Prinzip der Atomizität stellt sicher, dass entweder beide Schritte (die Erstellung der Bestellung und die Aktualisierung des Lagerbestands) erfolgreich abgeschlossen werden oder keiner von beiden. Das bedeutet im Detail:
- - Sollte der erste Schritt erfolgreich sein (die Bestellung wird erstellt), der zweite Schritt jedoch fehlschlagen (z.B. aufgrund eines Datenbankfehlers bei der Aktualisierung des Lagerbestands), wird die gesamte Transaktion abgebrochen. So bleibt die Datenbank in einem konsistenten Zustand und es wird keine Bestellung generiert, die nicht korrekt im Lagerbestand berücksichtigt ist.
- - Sollte ein Fehler im gesamten Transaktionsprozess auftreten, wird der ursprüngliche Zustand der Datenbank wiederhergestellt. Dies verhindert, dass unvollständige oder inkonsistente Daten in der Datenbank gespeichert werden.
- Zusammenfassung: Das Prinzip der Atomizität stellt sicher, dass entweder alle Schritte einer Transaktion (Bestellung und Lagerbestandsaktualisierung) erfolgreich abgeschlossen werden oder keine. Somit wird sichergestellt, dass keine Inkonsistenz in der Datenbank auftritt und der Online-Shop zuverlässige und konsistente Daten speichert.
b)
Angenommen, eine Datenbank hat fälschlicherweise eine Transaktion zugelassen, die die Gesamtsumme des Systems verändert. Welches der ACID-Prinzipien wurde verletzt? Begründe Deine Antwort und beschreibe ausführlich die Konsequenzen einer solchen Verletzung für die Datenbankintegrität.
Lösung:
Wenn eine Datenbank fälschlicherweise eine Transaktion zugelassen hat, die die Gesamtsumme des Systems verändert, wurde das Prinzip der Konsistenz verletzt.
- Grund: Das Konsistenzprinzip (Consistency) stellt sicher, dass jede Transaktion die Datenbank von einem konsistenten Zustand in einen anderen überführt. Konsistenz bedeutet in diesem Zusammenhang, dass alle während der Transaktion angewendeten Regeln und Einschränkungen (Constraints) eingehalten werden und die Datenbank keine widersprüchlichen Informationen enthält. Wenn eine Transaktion zugelassen wird, die die Gesamtsumme des Systems unzulässig verändert, deutet dies darauf hin, dass die Integritätsregeln der Datenbank verletzt wurden.
- Konsequenzen einer Verletzung der Konsistenz:
- - Inkonsistente Daten: Die Datenbank enthält nun ungültige oder widersprüchliche Informationen, was zu Vertrauensproblemen führen kann. Beispielsweise könnten die finanziellen Aufzeichnungen eines Unternehmens unrichtig sein, was zu schwerwiegenden finanziellen und rechtlichen Konsequenzen führen könnte.
- - Fehlende Verlässlichkeit: Systeme, die auf die Datenbank angewiesen sind, verlassen sich auf deren Richtigkeit und Integrität. Eine Verletzung der Konsistenz kann dazu führen, dass diese Systeme ebenfalls fehlerhafte Ergebnisse liefern.
- - Fehlfunktionen in Anwendungen: Anwendungen, die auf konsistenten Daten basieren, könnten unerwartete Fehler oder Abstürze erleiden, da sie auf annahmenbasierte Datenintegrität beruhen.
- - Vertrauensverlust: Kunden und Benutzer könnten das Vertrauen in das System verlieren, was zu einem negativen Ruf und möglichen Verlusten führen kann.
- - Komplexe Fehlersuche und Korrektur: Das Finden und Beheben von Inkonsistenzen kann zeitaufwändig und komplex sein, insbesondere in großen Datenbanken mit vielen miteinander verknüpften Datensätzen.
Insgesamt zeigt dies, wie wichtig es ist, dass alle ACID-Prinzipien, insbesondere die Konsistenz, strikt eingehalten werden, um die Integrität und Verlässlichkeit der Datenbank sicherzustellen.
c)
Isolationsstufen wie der 'Repeatable Read' und 'Serializable' definieren die Isolation von Transaktionen in einer Datenbank. Erkläre den Unterschied zwischen diesen beiden Isolationsstufen und wie sie das Verhalten gleichzeitiger Transaktionen beeinflussen können. Gib dabei konkrete Beispiele, wie Dirty Reads oder Phantom Reads vermieden werden.
Lösung:
Isolationsstufen definieren, wie Transaktionen in einer Datenbank voneinander isoliert werden, um die Konsistenz der Daten zu gewährleisten. Die Stufen 'Repeatable Read' und 'Serializable' bieten unterschiedliche Grade dieser Isolation.
- Repeatable Read: Diese Isolationsstufe stellt sicher, dass alle Daten, die von einer Transaktion gelesen werden, während der gesamten Laufzeit der Transaktion konsistent bleiben. Das bedeutet, dass keine andere Transaktion diese Daten ändern kann, bis die laufende Transaktion abgeschlossen ist. Allerdings können Phantom Reads (neue Datensätze, die von anderen Transaktionen während der Laufzeit der ersten Transaktion eingefügt werden) auftreten.
- Beispiel: Angenommen, Transaktion A liest alle Bestellungen eines Tages und speichert diese in einer Liste. Während Transaktion A läuft, fügt Transaktion B eine neue Bestellung hinzu. Mit 'Repeatable Read' ist sichergestellt, dass Transaktion A die ursprünglich gelesenen Bestellungen nicht verändert sieht, jedoch kann die neue Bestellung von Transaktion B möglicherweise nicht in der Liste enthalten sein, woraufhin Phantom Reads auftreten.
- Vermeidung von Dirty Reads: Da keine Transaktion Daten ändern kann, die von einer anderen Transaktion gelesen werden, bevor diese abgeschlossen ist, werden Dirty Reads vermieden.
- Serializable: Diese Isolationsstufe bietet den höchsten Grad an Isolation. Sie sorgt dafür, dass Transaktionen vollständig voneinander getrennt werden, als ob sie nacheinander ausgeführt würden. Dadurch können weder Dirty Reads noch Phantom Reads oder Non-Repeatable Reads auftreten.
- Beispiel: Angenommen, Transaktion A zählt die Anzahl der Bestellungen eines Tages. Während Transaktion A läuft, kann keine andere Transaktion (wie Transaktion B) eine neue Bestellung hinzufügen, löschen oder ändern, bis Transaktion A abgeschlossen ist. In dieser Stufe bleibt die Datenkonsistenz vollständig erhalten, da Transaktionen keine gegenseitigen Einflüsse haben.
- Vermeidung von Dirty Reads und Phantom Reads: Da die Transaktionen orchestriert werden, als ob sie nacheinander ausgeführt würden, können keine unvollständigen oder neu hinzugefügten Datensätze von parallelen Transaktionen die Lesevorgänge beeinflussen.
Zusammenfassend:
- 'Repeatable Read' schützt vor Dirty Reads und Non-Repeatable Reads, erlaubt jedoch Phantom Reads.
- 'Serializable' schützt vor Dirty Reads, Non-Repeatable Reads und Phantom Reads, bietet aber den höchsten Grad an Isolation, was zu einer geringeren Parallelität und möglicherweise zu einer verringerten Leistung führen kann.
d)
Diskutiere, wie das Prinzip der Dauerhaftigkeit (Durability) durch die Verwendung von Protokollen wie Write-Ahead Logging (WAL) umgesetzt wird. Beschreibe den grundlegenden Ablauf dieses Protokolls und wie es sicherstellt, dass abgeschlossene Transaktionen auch nach einem Systemabsturz erhalten bleiben.
Lösung:
Das Prinzip der Dauerhaftigkeit (Durability) stellt sicher, dass einmal abgeschlossene Transaktionen dauerhaft gespeichert bleiben, selbst bei Systemabstürzen oder anderen Fehlern. Ein weit verbreitetes Protokoll, das dieses Prinzip umsetzt, ist das Write-Ahead Logging (WAL).
- Grundlegender Ablauf des Write-Ahead Logging (WAL): Das WAL-Protokoll arbeitet nach dem Prinzip, dass alle Änderungen, die durch eine Transaktion vorgenommen werden, zuerst in ein Protokoll (Log) geschrieben werden, bevor sie in die eigentlichen Datenspeicher geschrieben werden. Dies geschieht in mehreren Schritten:
- 1. Transaktionsstart: Eine Transaktion beginnt, und alle geplanten Änderungen werden in einem temporären Speicher gehalten.
- 2. Protokollierung: Bevor die Änderungen in die Datenbank geschrieben werden, werden sie in ein Transaktionslog (WAL) geschrieben. Dieses Log enthält detaillierte Informationen darüber, welche Operationen durchgeführt werden sollen.
- 3. Schreiben in die Datenbank: Nachdem die Änderungen erfolgreich im Log protokolliert wurden, werden die tatsächlichen Daten im Datenspeicher der Datenbank geändert.
- 4. Transaktionsabschluss: Sobald alle Änderungen im Datenspeicher durchgeführt wurden, wird ein Commit-Record in das Protokoll geschrieben. Dieser Eintrag markiert die Transaktion als abgeschlossen.
- 5. Persistenz: Die Transaktionslogs werden auf dauerhaften Speicher (z.B. Festplatte) geschrieben, um sicherzustellen, dass sie auch bei einem Systemabsturz erhalten bleiben.
- Sicherstellung der Dauerhaftigkeit: Das WAL-Protokoll sorgt dafür, dass selbst bei einem Systemausfall die Informationen der abgeschlossenen Transaktionen nicht verloren gehen:
- - Systemabsturz: Nach einem Absturz kann das System das Transaktionslog verwenden, um den Zustand der Datenbank vor dem Absturz wiederherzustellen. Da alle Änderungen vorher im Log protokolliert wurden, kann das System die bereits abgeschlossenen Transaktionen einfach erneut aus dem Log anwenden.
- - Wiederherstellungsprozess: Bei der Wiederherstellung liest das System das Log und führt alle bestätigten, aber noch nicht in den Datenspeicher geschriebenen Änderungen durch. Auf diese Weise wird sichergestellt, dass die Datenbank den Zustand anzeigt, der sich nach dem erfolgreichen Abschluss der Transaktionen ergeben hat.
Zusammenfassend:
- Das WAL-Protokoll stellt die Dauerhaftigkeit von Transaktionen sicher, indem es ein Protokoll führt, das vor dem eigentlichen Ändern der Daten geschrieben wird.
- Es garantiert, dass im Falle eines Systemabsturzes alle abgeschlossenen Transaktionen rekonstruiert und die Datenbank in einen konsistenten Zustand zurückversetzt werden können.
Dadurch wird die Zuverlässigkeit und Integrität der Datenbank gewährleistet.