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