数据库设计 -- 外键设计

数据库设计 -- 外键设计

  • 外键的目的:通过数据库去保证数据的完整性,提高关联查询的效率
  • 外键的副作用:插入或更新的效率下降。

为何说外键有性能问题

  • 数据库需要维护外键的内部管理;
  • 外键等于把数据的一致性事务实现,全部交给数据库服务器完成;
  • 有了外键,当做一些涉及外键字段的增,删,更新操作之后,需要触发相关操作去检查,而不得不消耗资源;
  • 外键还会因为需要请求对其他表内部加锁而容易出现死锁情况;
扫描二维码关注公众号,回复: 210403 查看本文章

外键命名

  • fk_业务:例如,注册业务,user表有一个外键,可以命名为,fk_user_register
  • fk_当前表名_主表名:例如,登陆,user_session表有一个user_id外键,可以命名为,fk_user_session_user

该不该用外键

要用

    通过数据库保证数据完成性。两个表关联查询很多的时候,并且数据量不大,可以不考虑插入或更新的效率时候。

    例如:

  • 软件应用的人数有限,换句话说是可控的;
  • 数据库服务器的数据量也一般不会超大,且活跃数据有限;

可用,可以不用

    可以忍受数据不完整性。或认为程序已经可以控制数据的完整性。

    两个表关联查询很多的时候,但两个表的数据量不大或两个表关联查询很多,对查询效率不高,对插入或更新的效率要求高。

不用

    两个表无任何逻辑关系,对插入或更新效率要求及高;或者有逻辑关系,但是可以通过中间业务层控制逻辑关系的,这样的扩展性更好。

    例如:

    互联网应用:用户量大,并发度高,为此数据库服务器很容易成为性能瓶颈,尤其受IO能力限制,且不能轻易地水平扩展;若是把数据一致性的控制放到事务中,也即让应用服务器承担此部分的压力,而引用服务器一般都是可以做到轻松地水平的伸缩;

猜你喜欢

转载自youyu4.iteye.com/blog/2395692