Middle+
O'qishchi olib tashlanganda nima bo'ladi, u qo'lda kitob bilan? Ma'lumotlarning yaxlitligini qanday himoya qilish mumkin?
sobes.tech AI
AIdan javob
Agar o'quvchini, uning qo'lida kitob bo'lsa, o'chirsangiz, ma'lumotlar bazasida yoki ma'lumotlar tuzilmasida nomuvofiqlik yuzaga kelishi mumkin: kitob berilgan deb ko'rsatiladi, ammo o'quvchi allaqachon yo'q. Bu, kitobni olgan kimligini saqlash va ma'lumotlarning yaxlitligini buzadi.
Ma'lumotlarning yaxlitligini himoya qilish uchun quyidagi yondashuvlar qo'llanilishi mumkin:
- Ma'lumotlar bazasi darajasida cheklovlar: tashqi kalitlarni
ON DELETE RESTRICTyokiON DELETE CASCADEbilan sozlang. Masalan, o'quvchini, agar u kitoblar bilan ta'minlangan bo'lsa, o'chirishni taqiqlash. - Transaktsiyalar: o'quvchini o'chirishda, bog'liq yozuvlarni tekshirish va yangilash (masalan, kitoblarni qaytarish yoki boshqa o'quvchiga o'tkazish) bitta transaktsiyada amalga oshiriladi.
- Ilova mantiqi: o'chirishdan oldin, o'quvchining faol berishlari bo'lmaganligini tekshiring va o'chirishni taqiqlang yoki berishlarni boshqaring.
Go tilida, tekshirish va transaktsiya yordamida misol:
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("kitoblar bilan berilgan o'quvchini o'chirib bo'lmaydi")
}
_, err = tx.Exec("DELETE FROM readers WHERE id = ?", readerID)
if err != nil {
return err
}
return tx.Commit()
}