Middle+
Wat gebeurt er bij het verwijderen van een lezer die een boek in bezit heeft? Hoe bescherm je de gegevensintegriteit?
sobes.tech AI
Antwoord van AI
Als je een lezer verwijdert die een boek in bezit heeft, kan er een inconsistentie ontstaan in de database of datastructuur: het boek wordt als uitgeleend weergegeven, maar de lezer bestaat niet meer. Dit leidt tot verlies van informatie over wie het boek heeft geleend en schendt de gegevensintegriteit.
Om de gegevensintegriteit te beschermen, kunnen de volgende benaderingen worden gebruikt:
- Beperkingen op databasenniveau: configureer buitenlandse sleutels met de beperking
ON DELETE RESTRICTofON DELETE CASCADE. Bijvoorbeeld, het verwijderen van een lezer verbieden als hij uitgeleende boeken heeft. - Transacties: bij het verwijderen van een lezer, controleer en werk gerelateerde records bij (bijvoorbeeld, boeken teruggeven of overdragen aan een andere lezer) in één transactie.
- Toepassingslogica: controleer vooraf of de lezer geen actieve uitleningen heeft, en voorkom anders het verwijderen of beheer de uitleningen.
Voorbeeld in Go met gebruik van transactie en controle:
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("kan geen lezer met uitgeleende boeken verwijderen")
}
_, err = tx.Exec("DELETE FROM readers WHERE id = ?", readerID)
if err != nil {
return err
}
return tx.Commit()
}