老师,请问一下为什么不用外键呢?
来源:4-4 用户表设计

科比么么哒
2018-06-29
这里用户表的部门ID 不是用外键关键起来比较好吗 如果用户表插入了一个不存在的部门id,这样就能出现问题了
写回答
2回答
-
huangaiguo
2018-11-12
数据库 提供的主外键关系就没用了? 能否解释下 , 主外键的用处
022018-11-14 -
Jimin
2018-06-29
你好,目前我们开发习惯是通过业务上做关联,而不是建立明确的外键。比如用户表虽然存储了部门的id,但是并不会建立针对部门表的id的外键关联。这里考虑的原因很多,举几个来说一下。
1、外键本身会消耗一些性能,也会消耗一定空间,对一个表的操作也将变得很复杂。
2、每一个更新操作都会带来额外的检查,而这些检查通常你在业务端也会保证,比如你这里提到的如果用户表插入了一个不存在的部门id,那么在插入到数据库之前,程序应该检查出来并且阻止才对。在数据库里通过外键可以完全避免,但是业务端可以通过一些检查避免出现这些情况,毕竟数据库层已经是个单点,可以提高性能的地方我们都会有所考虑。
3、如果一个表数据量增长很快,需要做分表和分库,这个外键处理起来很麻烦
4、如果涉及到数据迁移及删除时,外键可能会带来许多不必要的麻烦
至少在我们看来,外键带来的好处,我们可以通过业务端检查来达到相同的目的。
042018-09-12
相似问题