Middle+
რა მოხდება, თუ წაიშლება კითხვისთვის განკუთვნილი პირი, რომელსაც წიგნი აქვს? როგორ დავიცვათ მონაცემების მთლიანობა?
sobes.tech AI
პასუხი AI-სგან
თუ წაიშლით მკითხველს, რომელსაც ხელში აქვს წიგნი, მონაცემთა ბაზაში ან მონაცემთა სტრუქტურაში შეიძლება გაჩნდეს შეუთავსებლობა: წიგნი მითითებულია როგორც გაცემული, მაგრამ მკითხველი უკვე არ არსებობს. ეს იწვევს ინფორმაციას იმის შესახებ, ვინ აიღო წიგნი, დაარღვევს მონაცემთა მთლიანობას.
მონაცემთა მთლიანობის დაცვისთვის შეიძლება გამოყენებულ იქნას შემდეგი მიდგომები:
- მონაცემთა ბაზის დონეზე შეზღუდვები: კონფიგურაცია გარე გასაღებებზე
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()
}