Middle+
Mida juhtub, kui kustutate lugeja, kellel on raamat? Kuidas kaitsta andmete terviklikkust?
sobes.tech AI
Vastus AI-lt
Kui te kustutate lugeja, kellel on raamat käes, võib andmebaasis või andmestruktuuris tekkida ebakõla: raamat näidatakse välja antud, kuid lugeja juba ei eksisteeri. See viib teabe kadumiseni selle kohta, kes raamatut võttis, ning rikub andmete terviklikkust.
Andmete terviklikkuse kaitsmiseks saab kasutada järgmisi lähenemisviise:
- Piirangud andmebaasi tasandil: konfigureerida välisvõtmed
ON DELETE RESTRICTvõiON DELETE CASCADEpiirangutega. Näiteks keelata lugeja kustutamine, kui tal on välja antud raamatuid. - Transaktsioonid: lugeja kustutamisel kontrollida ja uuendada seotud kirjeid (näiteks, tagastada raamatud või üle anda need teisele lugejale) ühes transaktsioonis.
- Rakenduse loogika: enne kustutamist kontrollida, kas lugejal pole aktiivseid laenutusi, ja juhul keelduda kustutamisest või hallata laenutusi.
Näide Go keeles transaktsiooni ja kontrolli kasutamisega:
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("ei saa kustutada lugejat, kellel on laenutatud raamatuid")
}
_, err = tx.Exec("DELETE FROM readers WHERE id = ?", readerID)
if err != nil {
return err
}
return tx.Commit()
}