Middle+
Ce se întâmplă când ștergi un cititor care are o carte în posesie? Cum protejezi integritatea datelor?
sobes.tech AI
Răspuns de la AI
Dacă ștergeți un cititor care are o carte în posesie, poate apărea o inconsistență în baza de date sau în structura de date: cartea este afișată ca fiind împrumutată, dar cititorul nu mai există. Acest lucru duce la pierderea informațiilor despre cine a luat cartea și încalcă integritatea datelor.
Pentru a proteja integritatea datelor, se pot folosi următoarele abordări:
- Restricții la nivelul bazei de date: configurați chei externe cu restricția
ON DELETE RESTRICTsauON DELETE CASCADE. De exemplu, interziceți ștergerea unui cititor dacă are cărți împrumutate. - Transacții: la ștergerea unui cititor, verificați și actualizați înregistrările legate (de exemplu, returnarea cărților sau transferul lor către alt cititor) într-o singură tranzacție.
- Logica aplicației: înainte de ștergere, verificați dacă cititorul nu are împrumuturi active și, dacă are, interziceți ștergerea sau gestionați împrumuturile.
Exemplu în Go folosind tranzacție și verificare:
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("nu se poate șterge un cititor cu cărți împrumutate")
}
_, err = tx.Exec("DELETE FROM readers WHERE id = ?", readerID)
if err != nil {
return err
}
return tx.Commit()
}