如果写的程序没有问题,在数据库上使用约束,能够避免数据库出现数据一致性的问题,但是随着业务逻辑的迭代,程序会出问题,而且出了问题后由于没有检查方式,无法在第一时间知道。
假设数据库有两个表,
表A:有字段a、b、c
表B:有字段d e f
假设,业务逻辑上需要满足
a = b * e + c
d = f - e
现在的的处理办法是找到大量的公式,写脚本进行检测
我的问题是:
- 假设我们针对每个字段都列出了公式,如何保证这些公式能够覆盖所有的业务逻辑呢?
- 如何保证所有的公式是最简的?a = b * e + c和c = b * e - a就是重复的
- 有没有自动的工具,配置一下或者输入公式就可以时时检查整个数据库是否有逻辑错误?
个人想法,分离项目应用层和业务数据层,关闭直接访问数据库入口,在业务数据层写日志,日志分离出致命的错误,脚本定期检查日志,发送警报到微信或者邮箱,用公式检查数据库会影响数据库运行,公式多,数据多的时候应该非常耗时
中间件、数据库触发器、数据库定时存储过程等等...
不过我建议在中间件完成比较好,网页服务器把数据提交给中间件,符合规则的就由中间件保存到数据库,不符合规则的,中间件向网页服务器报错。
我觉得数据库只是存储数据的地方,约束这种东西应该放在业务层中MVC的M来解决。在更新,插入数据库前就在业务逻辑中检查约束。至于已经存在的冲突,那就写个脚本找出来吧。