老师,请问一下为什么不用外键呢?

来源:4-4 用户表设计

科比么么哒

2018-06-29

这里用户表的部门ID  不是用外键关键起来比较好吗  如果用户表插入了一个不存在的部门id,这样就能出现问题了

写回答

2回答

huangaiguo

2018-11-12

数据库 提供的主外键关系就没用了?   能否解释下 ,  主外键的用处

0
2
huangaiguo
这么说 以后做数据库设计 ,这种主外键约束就不考虑了
2018-11-14
共2条回复

Jimin

2018-06-29

你好,目前我们开发习惯是通过业务上做关联,而不是建立明确的外键。比如用户表虽然存储了部门的id,但是并不会建立针对部门表的id的外键关联。这里考虑的原因很多,举几个来说一下。

1、外键本身会消耗一些性能,也会消耗一定空间,对一个表的操作也将变得很复杂。

2、每一个更新操作都会带来额外的检查,而这些检查通常你在业务端也会保证,比如你这里提到的如果用户表插入了一个不存在的部门id,那么在插入到数据库之前,程序应该检查出来并且阻止才对。在数据库里通过外键可以完全避免,但是业务端可以通过一些检查避免出现这些情况,毕竟数据库层已经是个单点,可以提高性能的地方我们都会有所考虑。

3、如果一个表数据量增长很快,需要做分表和分库,这个外键处理起来很麻烦

4、如果涉及到数据迁移及删除时,外键可能会带来许多不必要的麻烦

至少在我们看来,外键带来的好处,我们可以通过业务端检查来达到相同的目的。


0
4
故事的小黄花丶
回复
Jimin
嗯嗯 谢谢老师。
2018-09-12
共4条回复

Java开发企业级权限管理系统

源于企业真实Java项目,涉及大量高级技巧,覆盖权限管理开发技术

2261 学习 · 1347 问题

查看课程