大家在建表的时候都使用外键吗?

2020-12-22 10:53:45 +08:00
 Macv1994

在上一家公司不准使用外键,新入职一家公司,发现数据表中使用了很多外键,不知道大家日常是怎么操作的?

8351 次点击
所在节点    程序员
84 条回复
Macv1994
2020-12-22 14:24:59 +08:00
@CismonX 我上一家公司也差不多是这样....
ArJun
2020-12-22 14:27:50 +08:00
没事的,多用、到时候换人了换不动变相加薪···
wangbudong
2020-12-22 14:31:06 +08:00
以前用得多,现在基本少用
wangbudong
2020-12-22 14:31:33 +08:00
还是因为外键联动起来数据处理麻烦
steptodream
2020-12-22 14:35:35 +08:00
我用 django 都是小项目 外键方便的不行
Macv1994
2020-12-22 14:36:10 +08:00
@itIsUnbelievable 外键只是约束数据,不用外键也可以存
Macv1994
2020-12-22 14:36:59 +08:00
@steptodream 确实我自己写的几个 flask 小项目也是用的外键 真的减少很多工作量 不知道体量大的项目 应该怎么实践
lbunderway
2020-12-22 14:39:37 +08:00
用外键,不用约束
ren2881971
2020-12-22 14:49:47 +08:00
逻辑外键。
qilishasha
2020-12-22 14:55:58 +08:00
如果有一位麻烦的甲方或想法多的项目设计经理,可以尝试的用一下外键,你将会知道头发的珍贵
leeton
2020-12-22 14:58:24 +08:00
不用外键 感觉很反人类
Lemeng
2020-12-22 15:02:15 +08:00
不用,但可以,个人习惯
mamasan
2020-12-22 15:11:45 +08:00
我想问下, 不使用外键, 最简单的用户, 角色, 权限这种需要 5 张表的怎么查询啊?
Macv1994
2020-12-22 15:24:28 +08:00
@leeton 为什么觉得会反人类
qaz168000
2020-12-22 15:41:54 +08:00
确实很多年没有用过外键了,一般都是逻辑外键
dorothyREN
2020-12-22 15:44:03 +08:00
我寻思着,有外键会写 sql,没外键就不会写 sql 了?
wupher
2020-12-22 15:44:21 +08:00
不推荐,最好不用。

使用的好处是在数据库层来维护表间数据关联。但是,除非你是传统的 CS 程序,业务逻辑仍然以存储过程的形式编写,存在。现在一般是使用程序来建模,实现业务,相关逻辑更应该在代码,而非数据库层来进行维护。

使用数据层的坏处有
* 数据维护困难,某些数据的存在与删除由于外键、约束会导致很难维护
* 数据库层较难切换,同上
* 数据库升级麻烦,同上

现代设计更推荐将数据库仅视为存储与查询的简单组件,尽量较低业务依赖。
0bit
2020-12-22 15:49:14 +08:00
想一想有没有过度优化,想一想自己在做的项目的并发要求有多大,开发周期有多久,权衡取舍一下就行了,没必要非此即彼。
skypyb
2020-12-22 15:53:25 +08:00
在公司不用, 我自己项目会用。
主要是为了方便快速的开发, 维护丢给数据库后可以少耗些精力。 本身个人项目一般也达不到外键会影响到的量级, 开发效率至上
tokyo2020
2020-12-22 15:56:05 +08:00
@love 因为为啥还要再建这个副本数据的索引呢,我还要确保这个值在这 2 张表中是不是都存在,可能还要维护数据。 见《 SQL 反模式》 这本书 5.2 章节

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/737758

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX