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