Sobes.tech
Middle+

Šta će se desiti kada se obriše čitalac koji ima knjigu u rukama? Kako zaštititi integritet podataka?

sobes.tech АИ

Одговор од АИ

Ако избришете читател, който има издадена книга, може да възникне несъответствие в базата данни или в структурата на данните: книгата е посочена като издадена, но читателят вече не съществува. Това води до загуба на информация за това кой е взел книгата и нарушава цялостта на данните.

За защита на цялостта на данните могат да се използват следните подходи:

  • Ограничения на ниво база данни: конфигурирайте външните ключове с ограничение ON DELETE RESTRICT или ON DELETE CASCADE. Например, забранете изтриването на читател, ако има издадени книги.
  • Транзакции: при изтриване на читател проверявайте и актуализирайте свързаните записи (например, връщане на книгите или прехвърляне към друг читател) в една транзакция.
  • Логика на приложението: преди изтриване проверете дали читателят няма активни заеми, и ако има, забранете изтриването или управлявайте заемите.

Пример на Go с използване на транзакция и проверка:

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("незможно е да се изтрие читател с книги в заем")
    }

    _, err = tx.Exec("DELETE FROM readers WHERE id = ?", readerID)
    if err != nil {
        return err
    }

    return tx.Commit()
}