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