Sobes.tech
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 RESTRICT või ON DELETE CASCADE piirangutega. 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()
}