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