数据库设计 -- 外键设计

数据库设计 -- 外键设计

 

 

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

 

 

 

为何说外键有性能问题

 

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

 

 

 

 

外键命名

 

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

 

 

 

 

该不该用外键

 

要用

 

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

 

    例如:

 

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

 

 

可用,可以不用

 

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

 

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

 

 

 

不用

 

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

 

    例如:

 

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

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值