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()
}