物理外键和逻辑外键
所谓的数据库物理外键与逻辑外键
当看到物理外键的时候,第一反应是有物理外键那一定有逻辑外键,那我熟悉的外键是什么?
物理外键指的是使用foreign key 作为外键关联另一张的字段的连接方法,而且限定了引擎为InnoDB,而逻辑外键,又叫做事实外键,是因为存在语法上的逻辑关联而产生的外键,需要有连接关键词inner join 或者left join 等等和连接部分,也就是on后面的部分,如果需要对应的设置,也可以加上set等语句。
物理外键性能问题总结:
1.数据库需要维护外键的内部管理
2.外键等于把数据的一致性实物实现,全部交给数据库的服务器完成
3.有了外键,当做一些设计外键字段的增、删、更新操作之后,需要触发相关操作去检查,不得不消耗资源
4.外键还会印象需要请求对其他表内部加锁而容易出现死锁的情况
外键对扩展性的限制和影响外键的主从关系
-
如果你每天数据库关联都是使用物理外键,但是如果哪天主键所在的表需要拆分或重构。
-
如果哪天你发现外键表不是非要跟主表的主键挂上关系 ,这种情况并不少见,尤其是数据库设计者水平不够高的时候。
-
另一个方面,数据库帮你保证级联关系,平时写程序的时候思路足够清晰吗,因为某些原因(比如你需要的关系数据库并不支持,mysql经常发生),有些地方你就不能去设置物理外键了,当有级联更新的需求时,一部分靠物理外键,一部分靠自己,其实还不如全使用代码逻辑去保证如果你需要分库分表的时候,物理外键就没什么用了。
逻辑外键在业界内是比较成熟的外键,即使不使用物理外键,我们也能约定逻辑外键(不在数据库声明外键,在程序实现上表达关联关系)
数据库上的策略:
可以选择大多数情况下我们只更新不删除,也就是逻辑删除,不再使用的历史数据定期归档来减少压力