Sobes.tech
Middle+

Bir kitabı olan bir okuyucu silindiğinde ne olur? Verilerin bütünlüğünü nasıl koruyabilirsiniz?

sobes.tech yapay zeka

AI'dan gelen yanıt

Bir okuyucu, elinde kitap varken silinirse, veritabanında veya veri yapısında tutarsızlık oluşabilir: kitap ödünç verilmiş olarak görünür, ancak okuyucu artık yoktur. Bu, kimin kitabı aldığı bilgisi kaybolmasına ve veri bütünlüğünün bozulmasına neden olur.

Veri bütünlüğünü korumak için aşağıdaki yaklaşımlar kullanılabilir:

  • Veritabanı seviyesinde kısıtlamalar: ON DELETE RESTRICT veya ON DELETE CASCADE kısıtlamalarıyla dış anahtarlar yapılandırın. Örneğin, ödünç alınmış kitaplar olan bir okuyucunun silinmesini engelleyin.
  • İşlemler (Transaksiyonlar): Bir okuyucu silinirken, ilişkili kayıtlar (örneğin, kitapların iadesi veya başka bir okuyucuya aktarılması) tek bir işlemde kontrol edilip güncellenmelidir.
  • Uygulama mantığı: Silmeden önce, okuyucunun aktif ödünçleri olmadığını kontrol edin ve gerekirse silmeyi engelleyin veya ödünçleri yönetin.

Go dilinde, işlem ve kontrol kullanarak örnek:

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("ödünç alınmış kitaplar olan bir okuyucuyu silemezsiniz")
    }

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

    return tx.Commit()
}