当前位置:Gxlcms > PHP教程 > 为什么很多mysql课程不推荐用物理外键?

为什么很多mysql课程不推荐用物理外键?

时间:2021-07-01 10:21:17 帮助过:5人阅读

回复内容:

因为mysql数据库设计得不好,用数据库的外键有问题。以及,近年来互联网的发展,弱化数据库,可以容忍错误数据错误也成为潮流。牺牲正确性换取效率,成为潮流。DBA的水平越来也差也成为事实。

别说mysql了,其他数据库也都不用外键了。牺牲掉数据的正确性被认为是没有任何问题的。哪怕银行的系统也是一样。至于业务上如何保证关键数据(钱)是对的?好几个系统互相对账呗。

错了,修复数据嘛。只要错得不离谱就行。用外键也不能保证不出业务错误。很多时候外键的级联更新或者删除造成了性能灾难。只能级联禁止,这样造成了开发效率的下降。没有开发效率,如何有时间修复bug和优化系统呢?

外键会和触发器一样变成小众和适用场景及其少的遗留技术。 其实不光是mysql,从DBA的角度出发,我也不建议在oracle里使用外键。
外键的效果完全可以通过业务逻辑来保证,但是它带来的一系列性能问题却很难有办法解决。 看你要在哪一层面维护模型完整性。我们暂时也没有用到。但是不应该一概而论,简单的说外键没有用。 使用外键的目的是保证数据的完整性,但是这样会带来额外的性能上的开销。替代的做法是可以在应用程序中完成这一步,并且可以通过异步处理增加效率。其次外键在水平分表和分库的情况下就无法使用了。 外健开销较大,不利于维护,而且在业务逻辑中维护就绰绰有余了。 数量级不够没有sharding的系统,最好还是用外键约束来保护数据,你不能指望程序猿写的代码都是高质量的数据访问。
大数据量的分布式系统最好别用,拆表拆到死,但也要用别的办法保证数据完整性才好。

作为新项目的话,个人认为是一定要用的。因为项目迭代的时候,其他代码大不了推了重做就好,数据要是乱了,那真就是回天乏力了。

人气教程排行