数据验证应该在哪里进行?

时间:2011-01-27 17:25:13

标签: database validation n-tier-architecture

我已经阅读了关于数据验证应该发生在何处的矛盾理念,这让我更加困惑。有人说它应该只在数据库中。其他人说验证规则应该反映在其他层,如bll或ui。

数据验证应该在哪里进行?规则应该分为多个层次吗?什么是一些实际的最佳实践(与理论相反,在云类型中填写)关于在数据库顶部运行的应用程序中验证数据的时间和位置。

2 个答案:

答案 0 :(得分:9)

我的2美分:

数据验证应在两个位置进行:

  1. 对数据采取行动的点,例如验证SQL查询的输入参数。

  2. 提交数据时的常规验证,例如在Web应用程序中,应在客户端进行一些验证。优点是您可以快速通知用户输入问题,即错误形成的电话号码,字符串太长等等。但是,对于Web应用程序,恶意用户不应该依赖于权威验证检查。可以绕过客户端验证。

  3. 在我看来,数据库不应该执行一般验证,数据应该在进入数据库之前进行验证/转义/清理。也就是说,您的数据库模式可以通过列数据类型,约束等为您提供一定程度的抽象验证。也就是说,任何可能触发这些问题的数据都应该在传递到数据库之前进行“清理”。

    这说,有许多错误的方法,但没有正确的方法。验证取决于应用程序的体系结构,其中的数据性质以及如何使用这些数据。

答案 1 :(得分:3)

应该这样做:

  • 在首次输入时
  • 在改变/操纵的任何地方
  • 可能导致错误或数据不正确的任何地方
例如,在数据库驱动的Web表单应用程序中,您将进行客户端javascript验证,可能是业务逻辑中的某些服务器端验证,然后是数据库中的进一步约束,范围从数据类型到检查约束。 / p>