将数据验证完全委托给数据库引擎约束是一种好习惯吗?
从应用程序验证数据不会阻止从另一个软件无效插入(可能由另一个团队用另一种语言编写).使用数据库约束可以减少需要担心无效输入数据的点.
如果您在数据库和应用程序中都进行了验证,那么维护变得很无聊,因为您必须更新谁知道有多少应用程序的代码,从而增加了人为错误的可能性.
我只是看不到这么做,看着自由软件项目的代码.
在输入时验证.在将其放入数据库之前再次验证.并具有数据库约束以防止错误输入.尽管如此,您仍然可以打赌,不良数据仍会进入您的数据库,因此在您使用它时再次验证它.
似乎每天都有一些网络应用被黑客攻击,因为他们在表单中做了所有的验证,或者更糟糕的是,使用Javascript,人们找到了绕过它的方法.你必须要防范这一点.
偏执?我?不,只是经验丰富.
在可能的情况下,最好在数据库中指定验证规则,并使用或编写一个框架,使这些规则冒泡到您的前端.ASP.NET动态数据有助于实现这一点,并且有一些商业库可以使它更容易.
这既可以用于简单的输入验证(如数字或日期),也可以用于受外键约束的相关数据.
总之,我们的想法是在一个地方(数据库大部分时间)定义规则,并在其他层中使用代码来强制执行这些规则.