Middle+
Was passiert, wenn ein Leser gelöscht wird, der ein Buch ausgeliehen hat? Wie schützt man die Datenintegrität?
sobes.tech KI
Antwort von AI
Wenn ein Leser gelöscht wird, der ein Buch ausgeliehen hat, kann es zu Inkonsistenzen in der Datenbank oder in der Datenstruktur kommen: Das Buch wird als ausgeliehen angezeigt, aber der Leser existiert nicht mehr. Dies führt zum Verlust von Informationen darüber, wer das Buch ausgeliehen hat, und verletzt die Datenintegrität.
Um die Datenintegrität zu schützen, können folgende Ansätze verwendet werden:
- Restriktionen auf Datenbankebene: Konfigurieren Sie Fremdschlüssel mit der Einschränkung
ON DELETE RESTRICToderON DELETE CASCADE. Zum Beispiel das Löschen eines Lesers verbieten, wenn er ausgeliehene Bücher hat. - Transaktionen: Beim Löschen eines Lesers prüfen und aktualisieren Sie die zugehörigen Einträge (z.B. Rückgabe der Bücher oder Übertragung auf einen anderen Leser) in einer einzigen Transaktion.
- Anwendungslogik: Vor dem Löschen prüfen, ob der Leser keine aktiven Ausleihen hat, und das Löschen entweder verbieten oder die Ausleihen verwalten.
Beispiel in Go mit Verwendung einer Transaktion und Prüfung:
func DeleteReader(db *sql.DB, readerID int) error {
tx, err := db.Begin()
if err != nil {
return err
}
defer tx.Rollback()
var count int
err = tx.QueryRow("SELECT COUNT(*) FROM books WHERE reader_id = ?", readerID).Scan(&count)
if err != nil {
return err
}
if count > 0 {
return fmt.Errorf("Löschen eines Lesers mit ausgeliehenen Büchern ist nicht erlaubt")
}
_, err = tx.Exec("DELETE FROM readers WHERE id = ?", readerID)
if err != nil {
return err
}
return tx.Commit()
}