Middle+
¿Qué ocurrirá al eliminar un lector que tiene un libro en préstamo? ¿Cómo proteger la integridad de los datos?
sobes.tech AI
Respuesta de la IA
Si se elimina un lector que tiene un libro en préstamo, puede surgir una inconsistencia en la base de datos o en la estructura de datos: el libro aparece como prestado, pero el lector ya no existe. Esto conduce a la pérdida de información sobre quién tomó el libro y viola la integridad de los datos.
Para proteger la integridad de los datos, se pueden usar los siguientes enfoques:
- Restricciones a nivel de base de datos: configurar claves externas con la restricción
ON DELETE RESTRICToON DELETE CASCADE. Por ejemplo, prohibir eliminar un lector si tiene libros prestados. - Transacciones: al eliminar un lector, verificar y actualizar los registros relacionados (por ejemplo, devolver los libros o transferirlos a otro lector) en una sola transacción.
- Lógica de la aplicación: antes de eliminar, verificar que el lector no tenga préstamos activos, y en caso contrario, prohibir la eliminación o gestionar los préstamos.
Ejemplo en Go usando transacción y verificación:
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("no se puede eliminar un lector con libros prestados")
}
_, err = tx.Exec("DELETE FROM readers WHERE id = ?", readerID)
if err != nil {
return err
}
return tx.Commit()
}