luv*_*ere 3 database validation desktop-application
在使用数据库进行存储的单用户桌面应用程序中,是否有必要对数据库执行数据验证,还是可以在代码中执行此操作?什么是最佳实践,如果没有,两种可能性的优缺点是什么?
最佳做法是.数据库应负责确保其自身状态有效,并且程序应确保它不会将垃圾传递到数据库.
缺点是你必须编写更多的代码,并且你有额外的运行时开销 - 这两者通常都不是特别好的理由.
优点是数据库确保了低级别的有效性,但是程序可以帮助用户输入有效数据,而不仅仅是从数据库中传回错误 - 它可以提前介入并提供UI提示(例如,将无效文本字段着色为红色)直到他们完成正确,等)
- 编辑(从评论中提升的更多信息) -
在许多情况下,智能方法是在每端编写数据驱动的验证器,并使用共享数据文件(例如XML)来驱动验证.如果验证规范发生更改,则只需编辑描述文件,验证的两端将同步更新.(没有代码更改).
你做到了.
数据验证的最佳实践是清理程序对数据库的输入.但是,这并不能成为数据库拥有自己的验证的借口.在代码中编写验证仅考虑托管环境中生成的增量.它不会考虑数据库损坏,管理错误以及数据库将被多个应用程序使用的远程/未来可能性,在这种情况下,应在此新应用程序中复制应用程序级数据验证逻辑.
您的数据库应该有自己的验证例程.您不必将它们视为清理传入数据,就像运行完整性检查/约束/断言一样.数据库中任何时候都不应包含无效数据.这就是完整性约束的全部要点.
总而言之,您同时执行以下两项操作:
在数据到达数据库之前,应始终在代码中进行验证.