数据库异常处理最佳实践

aku*_*aku 14 database architecture exception

如何在应用程序中处理数据库异常?
您是在尝试在将数据传递给DB之前验证数据还是仅仅依赖于数据库模式验证逻辑?
您是否尝试从某种DB错误中恢复(例如超时)?

以下是一些方法:

  1. 在将数据传递给DB之前验证数据
  2. 左对数据库进行验证并正确处理数据库异常
  3. 双方验证
  4. 验证业务逻辑中的一些明显约束并将复杂验证留给DB

你用什么方法?为什么?

更新:

我很高兴看到越来越多的讨论.
让我们试着总结一下社区的答案.

建议:

你有什么要说的吗?这将转换为验证特定问题.我们缺少核心,即"数据库相关的错误最佳实践",哪些要处理,哪些要冒泡?

小智 6

@aku:干很好,但并不总是可行的.验证是其中一个地方,因为您将有三个完全不同且不相关的地方,其中验证不仅可行而且绝对需要:在UI内,在业务逻辑内,以及在数据库内.

想想一个Web应用程序.您希望减少到服务器的访问,因此您包括客户端数据条目的javascript验证.但您无法信任用户输入的内容,因此您必须在触摸数据库之前在业务逻辑中执行验证.并且数据库必须具有自己的验证以防止数据损坏.

在单个组件中统一这三种不同类型的验证没有干净的方法.

正在进行一些尝试来统一交叉责任,例如P&P集团的政策注入应用程序块与其验证应用程序块相结合的政策注入器中验证,但这些仍然是基于代码的.如果您的验证不在代码中,则仍需要单独维护并行逻辑...


Seb*_*son 5

在客户端和数据库端进行验证有一个致命原因,那就是安全性。特别是当您开始使用 AJAX 内容、可破解 URL 和其他使您的网站(在本例中)对用户黑客更友好的内容时。

在客户端上进行验证以提供流畅的体验,尽早告诉用户更正他们的输入。还要在数据库中(或在业务逻辑中,如果这被认为是完全安全的数据库网关)进行验证,以确保数据库的安全性。


ham*_*mcn 1

一般来说,我会尝试在输入数据后尽快验证数据。这样我就可以在用户单击“提交”或类似操作之后更早地向他们提供有用的消息。
当进行数据库调用时,我希望我传递的数据应该相当好。
我尝试将数据库调用保留在共享辅助方法的一个文件(或一组文件)中,使程序员(我或其他添加调用的人)尽可能轻松地写入有关异常以及参数的日志详细信息被传入等