浅析设计数据库时是否使用外键约束

外键 (FK) 是用于在两个表中的数据之间建立和加强链接的一列或多列的组合,可控制可在外键表中存储的数据。 在外键引用中,当包含一个表的主键值的一个或多个列被另一个表中的一个或多个列引用时,就在这两个表之间创建了链接。 这个列就成为第二个表的外键。

  • 如果应用用户量大,并发度高的话,数据库服务器很容易成为性能瓶颈,尤其受IO能力限制,而且不能轻易地进行水平扩展,试想一下,如果对数据库插入的数据量很大,如果存在外键约束的话,每次都要去扫描此记录是否合格,那样的话,会给数据库服务器很大的压力!如果我们把数据一致性的控制放在事务中,也即让应用服务器去承担此部分的压力,而且应用服务器一般都可以轻松地做到水平伸缩。

为什么说外键有性能问题呢?
- 数据库需要维护外键的内部管理;
- 外键相当于把数据的一致性事务的实现全部交给了数据库服务器完成;
- 我们使用了外键后,当涉及到外键字段的增、删、改、更新操作之后,需要触发数据库数据库服务器去检查这些限制条件,就会消耗数据库服务器的资源。
- 外键还会因为需要请求对其他表内部加锁而容易出现死锁。
当我们不用外键而是通过业务逻辑实现数据的一致性时,应该再写一层,然后各个应用通过这一层来访问我们的数据库。

当然啦,并不是不能使用外键,当我们构建的大型系统时的性能要求不高,安全性要求高时,我们可以使用外键;当我们构建小系统时,建议使用外键,因为数据的一致性全部由数据库去处理,我们只需要写很少量的业务代码就可以实现功能了。

**

个人想法:

**
推荐不要使用外键,因为无论是大项目还是小项目,如果用户需求多变,建议还是不要使用外键了。而且我现在发现不使用外键写业务代码约束更小。不过用也可以,但使用外键要适当。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值