今日,互联网技术的逐渐强大,方便了我们的衣食住行,我们的的个人信息都存储在数据库,那么数据库都运用到哪些技术呢?今天我就大家分享一下:
首先,很多人在工作中确实也不会使用外键。但是呢,询问他们原因,大多是这么回答:每次做DELETE或者UPDATE都必须考虑外键约束,会导致开发的时候很痛苦,测试数据极为不方便。坦白说,这么说也是对的。但是呢,不够全面。接下来我就展开说明。
我们明确一点,外键约束是一种约束,这个约束存在,会保证表间数据的关系“始终完整”。因此,外键约束的存在,并非全然没有优点。比如使用外键,可以:
保证数据的完整性和一致性;
级联操作方便;
将数据完整性判断托付给了数据库完成,减少了程序的代码量;
然而,鱼和熊掌不可兼得。外键是能够保证数据的完整性,但是会给系统带来很多缺陷。正是因为这些缺陷,才给我们不推荐使用外键,具体如下:
性能问题
假设有一张表,这张表里有两个外键字段,指向两张表。那么每次往这张表里插入数据,就必须往两个外键对应的表里查询是否有对应数据。如果交由程序控制,这种查询过程就可以控制在我们手里,可以省略一些不必要的查询过程。但是如果由数据库控制,则是必须要去这两张表里判断。
并发问题
在使用外键的情况下,每次修改数据都需要去另外一个表检查数据,需要获取额外的锁。若是在高并发大流量事务场景,使用外键更容易造成死锁。
扩展性问题
这主要是分为两点:
做平台迁移方便
分库分表方便
技术问题
使用外键,其实将应用程序应该执行的判断逻辑转移到了数据库上。那么就意味着一点,数据库的性能开销变大了,对D,B,A的要求就更高了。
相反的,如果该约束逻辑在应用程序中,发现应用服务器性能不够,可以加机器,做水平扩展。如果在数据库服务器上,数据库服务器会成为性能瓶颈,做水平扩展比较困难。
综上所述,是我个人的一些观点,欢迎大家在评论区留下自己的观点!
领取专属 10元无门槛券
私享最新 技术干货