0%

Kapitel 7

Mehrere Änderungen, ein Ergebnis

Wenn eine Ausleihe auf halbem Weg abbricht

Ein Mitglied möchte die Projektionsleinwand und das Reparaturset zusammen ausleihen. Diese Anfrage als zwei unabhängige Änderungen zu behandeln kann ein Ergebnis hinterlassen, das niemand angefordert hat.

Hier ist das vorgeschlagene Paar:

Ausleih-IDGegenstands-IDMitglieds-IDAusleihdatum
70014172026-08-26
700259992026-08-26

Die erste Zeile ist gültig. Die zweite verweist auf Mitglied 999, das nicht existiert. Angenommen, ein Programm speichert die erste Zeile und schließt sie ab, bevor es die zweite versucht:

Proposed loans: [(7001, 4, 17, '2026-08-26'), (7002, 5, 999, '2026-08-26')]
Second loan: rejected by the missing-member rule
New loan IDs after reopening: [7001]
Wanted new loan IDs: []

Die Datenbank hat die ungültige Anweisung korrekt abgelehnt. Sie wusste nicht, dass die beiden Anweisungen eine Anfrage darstellten. Ausleihvorgang 7001 bleibt bestehen, sodass der Katalog nur die Hälfte der angeforderten Ausleihe festhält.

Für diese Operation bedeutet Erfolg, dass beide neuen Zeilen gespeichert werden. Fehlschlag bedeutet, dass keine der beiden neuen Zeilen gespeichert wird. Diese Alles-oder-nichts-Eigenschaft heißt Atomarität. Eine Datenbank-Transaktion fasst Änderungen zusammen, sodass sie gemeinsam ein Ergebnis erreichen.

Atomarität bedeutet nicht, dass überall alle zwei Anweisungen zusammengefasst werden müssen. Sie folgt der Bedeutung der Operation. Zwei unabhängige Mitglieder, die nicht zusammengehörige Gegenstände ausleihen, könnten separate Ergebnisse haben. Diese beiden Zeilen sind eine Set-Anfrage, also ist ein unvollständiger Anfang kein nützlicher Erfolg.

Was ging bei der beobachteten Ausleihe von zwei Gegenständen schief?

Python braucht einen klaren Erfolgspunkt und einen klaren Fehlerpfad. Beginne mit dem erfolgreichen Teil, bevor du änderst, wie Fehler aufgelöst werden.