Sobes.tech
Middle+

Que se passera-t-il lors de la suppression d'un lecteur ayant un livre en prêt ? Comment protéger l'intégrité des données ?

sobes.tech IA

Réponse de l'IA

Si vous supprimez un lecteur qui a un livre en prêt, cela peut entraîner une incohérence dans la base de données ou dans la structure de données : le livre est indiqué comme prêté, mais le lecteur n'existe plus. Cela entraîne une perte d'informations sur qui a emprunté le livre et viole l'intégrité des données.

Pour protéger l'intégrité des données, vous pouvez utiliser les approches suivantes :

  • Contraintes au niveau de la base de données : configurer des clés étrangères avec la restriction ON DELETE RESTRICT ou ON DELETE CASCADE. Par exemple, interdire la suppression d'un lecteur s'il a des livres empruntés.
  • Transactions : lors de la suppression d'un lecteur, vérifier et mettre à jour les enregistrements liés (par exemple, rendre les livres ou les transférer à un autre lecteur) dans une seule transaction.
  • Logique de l'application : avant de supprimer, vérifier que le lecteur n'a pas de prêts actifs, et en cas contraire, interdire la suppression ou gérer les prêts.

Exemple en Go utilisant une transaction et une vérification :

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("impossible de supprimer un lecteur avec des livres en prêt")
    }

    _, err = tx.Exec("DELETE FROM readers WHERE id = ?", readerID)
    if err != nil {
        return err
    }

    return tx.Commit()
}