Sobes.tech
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 RESTRICT sau ON 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()
}