数据库中为什么不推荐使用外键约束
“
【强制】不得使用外键与级联,一切外键概念必须在应用层解决。
”
每次做DELETE 或者UPDATE都必须考虑外键约束,会导致开发的时候很痛苦,测试数据极为不方便。
——原因
首先我们明确一点,外键约束是一种约束,这个约束的存在,会保证表间数据的关系“始终完整”。因此,外键约束的存在,并非全然没有优点。
比如使用外键,可以
保证数据的完整性和一致性级联操作方便将数据完整性判断托付给了数据库完成,减少了程序的代码量
鱼和熊掌不可兼得。外键是能够保证数据的完整性,但是会给系统带来很多缺陷。正是因为这些缺陷,才导致我们不推荐使用外键
假设一张表名为test_ta。那么这张表里有两个外键字段,指向两张表。那么,每次往test_ta表里插入数据,就必须往两个外键对应的表里查询是否有对应数据。如果交由程序控制,这种查询过程就可以控制在我们手里,可以省略一些不必要的查询过程。但是如果由数据库控制,则是必须要去这两张表里判断。【性能】
在使用外键的情况下,每次修改数据都需要去另外一个表检查数据,需要获取额外的锁。若是在高并发大流量事务场景,使用外键更容易造成死锁。【并发】
使用外键,其实将应用程序应该执行的判断逻辑转移到了数据库上。那么这意味着一点,数据库的性能开销变大了,那么这就对DBA的要求就更高了。【技术要求没那么高】
关注『IT论』
看更多奇幻科技在眼前
领取专属 10元无门槛券
私享最新 技术干货