Middle+
O que acontecerá ao remover um leitor que tem um livro emprestado? Como proteger a integridade dos dados?
sobes.tech IA
Resposta da IA
Se um leitor que tem um livro emprestado for eliminado, pode surgir uma inconsistência na base de dados ou na estrutura de dados: o livro aparece como emprestado, mas o leitor já não existe. Isto leva à perda de informação sobre quem pegou o livro e viola a integridade dos dados.
Para proteger a integridade dos dados, podem ser usadas as seguintes abordagens:
- Restrições ao nível da base de dados: configurar chaves externas com a restrição
ON DELETE RESTRICTouON DELETE CASCADE. Por exemplo, proibir a eliminação de um leitor se ele tiver livros emprestados. - Transações: ao eliminar um leitor, verificar e atualizar os registos relacionados (por exemplo, devolver os livros ou transferi-los para outro leitor) numa única transação.
- Lógica da aplicação: antes de eliminar, verificar se o leitor não tem empréstimos ativos, e em caso afirmativo, proibir a eliminação ou tratar os empréstimos.
Exemplo em Go usando transação e verificação:
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("não é possível eliminar um leitor com livros emprestados")
}
_, err = tx.Exec("DELETE FROM readers WHERE id = ?", readerID)
if err != nil {
return err
}
return tx.Commit()
}