无论是在代码课程的学习中,还是在实际的工作中,都很少见到建表的时候用到外键的,在听课的时候,老师总结了几点,我觉得可以记录下来,当做一种笔记,或者是以后面试的一种基石。
-
性能影响
在数据插入表的时候,数据库会检查数据的完整性, 就是会检查外键的那个字段是否有值,如果没有值的话,该条数据会插入不进去。如果是数据量小的项目,可以手工进行排查;如果是数据量大且高并发的项目,不仅仅排查困难,而且影响高并发的系统的性能。 -
热更新
现在很多上线的项目在更新功能的时候,基本都采取热更新的模式(热更新是指不重启服务器的方式下,进行功能的迭代),如果数据库存在外键,在更新代码的时候,数据库要匹配表数据外键的完整性,有时候要重启数据库所在的服务器才能成功更新代码。重启服务器在7*24的项目中,往往是不能接受的。 -
提高耦合度
外键会增加两张表的耦合度,在数据的增删操作下,两张表要同步更新,会大大增加数据操作的难度。 -
数据库分库分表
大型项目运行一段时间后,会产生大量数据,需要进行分库分表,如果使用了外键,就难以对这几张表进行分库分表,提高不了系统的性能。
所以在设计数据库表的时候,即使两张表存在关联关系,尽量使用逻辑上的关联(就是人为的约定外键),避免物理逻辑上的外键,从而提高数据库的性能,降低表的耦合度。