Middle+
Co se stane při odstranění čtenáře, který má na rukou knihu? Jak chránit integritu dat?
sobes.tech AI
Odpověď od AI
Pokud odstraníte čtenáře, který má vypůjčenou knihu, může dojít k nesouladu v databázi nebo v datové struktuře: kniha je označena jako vypůjčená, ale čtenář již neexistuje. To vede ke ztrátě informací o tom, kdo si knihu vypůjčil, a narušuje integritu dat.
Pro ochranu integrity dat lze použít následující přístupy:
- Omezení na úrovni databáze: nakonfigurujte cizí klíče s omezením
ON DELETE RESTRICTneboON DELETE CASCADE. Například zakázat odstranění čtenáře, pokud má vypůjčené knihy. - Transakce: při odstraňování čtenáře ověřte a aktualizujte související záznamy (například vrácení knih nebo jejich převedení na jiného čtenáře) v jedné transakci.
- Logika aplikace: před odstraněním ověřte, že čtenář nemá aktivní výpůjčky, a v opačném případě zakázat odstranění nebo spravovat výpůjčky.
Příklad v Go s použitím transakce a kontroly:
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("nelze smazat čtenáře s vypůjčenými knihami")
}
_, err = tx.Exec("DELETE FROM readers WHERE id = ?", readerID)
if err != nil {
return err
}
return tx.Commit()
}