Middle+
Kas notiks, ja dzēsīsiet lasītāju, kuram ir grāmata rokās? Kā aizsargāt datu integritāti?
sobes.tech AI
Atbilde no AI
Ja jūs dzēšat lasītāju, kuram ir paņemta grāmata, tad datu bāzē vai datu struktūrā var rasties neatbilstība: grāmata tiek rādīta kā izsniegta, bet lasītājs jau vairs nepastāv. Tas noved pie informācijas zaudēšanas par to, kurš ir paņēmis grāmatu, un pārkāpj datu integritāti.
Lai aizsargātu datu integritāti, var izmantot šādus pieejas veidus:
- ** Ierobežojumi datu bāzē:** konfigurēt ārējos atslēgas ar
ON DELETE RESTRICTvaiON DELETE CASCADE. Piemēram, aizliegt dzēst lasītāju, ja viņam ir izsniegtas grāmatas. - Transakcijas: dzēšot lasītāju, pārbaudīt un atjaunināt saistītos ierakstus (piemēram, atgriezt grāmatas vai pārsūtīt tās citam lasītājam) vienā transakcijā.
- Pieteikuma loģika: pirms dzēšanas pārbaudīt, vai lasītājs nav ar aktīvām izsniegšanām, un, ja ir, aizliegt dzēšanu vai pārvaldīt izsniegumus.
Piemērs Go valodā ar transakcijas un pārbaudes izmantošanu:
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("nevar izdzēst lasītāju ar izsniegtām grāmatām")
}
_, err = tx.Exec("DELETE FROM readers WHERE id = ?", readerID)
if err != nil {
return err
}
return tx.Commit()
}