在上一家公司不准使用外键,新入职一家公司,发现数据表中使用了很多外键,不知道大家日常是怎么操作的?
在上一家公司不准使用外键,新入职一家公司,发现数据表中使用了很多外键,不知道大家日常是怎么操作的?
|
sxfscoolDec 22, 2020
1
很久没用过外键了
|
|
dddz97Dec 22, 2020
2
基本没用过
|
|
xcai007Dec 22, 2020
3
可以使用外键
|
|
liuzhaowei55Dec 22, 2020 via iPhone
4
不用外键,甚至已经比较少使用主键关联了,使用业务唯一对象关联比较多
|
|
5
@liuzhaowei55 感觉外键有时候还挺方便的😹😹😹
|
|
yisheyuanzhangDec 22, 2020
6
没用过外键。。。
|
|
liuzhaowei55Dec 22, 2020 via iPhone
7
@Macv1994 使用主键外键后期排查问题不太方便,要先去原表查出主键再去查外键数据,要不就是一个大 join,
|
|
SjwNo1Dec 22, 2020
8
可以用但不用
|
|
WhoMercyDec 22, 2020
9
V2 因为外键、范式的问题讨论 /争吵过好几次了...
我的意见是,自己不确定 能不能用、需不要需要用 的时候,就不用 |
|
10
外键的目的是为了数据的完整性和一致性,
对于多表之间需要强数据一致性和完整性要求业务,且数据库会被不同语言或不同项目连接时, 我会用外键,因为不能保证别人或别的项目一定会知道,我这个项目要求哪些表之间数据是必须要有的。 但绝大部分一般业务我不会加数据库外键,因为大部分情况下,我们都在同一个项目下,使用同一套 编程语言别写的业务代码,来处理业务,而在业务层面,使用编程语言来约束更具有灵活性。 |
|
SkyLine7Dec 22, 2020
13
用外键级联很麻烦的,现在都拿关联字段当做逻辑外键
|
|
TinkDec 22, 2020
14
少用
|
|
acmoreDec 22, 2020
15
现在的业务并不喜欢让数据库做太多掌控之外的事情,外键算是最不讨喜的一个。
以及外键在配合某些 ORM 框架使用时可能会有暗坑,你无法预设 "outer.inner" 这种写法一定会缓存结果,背后可能会有一堆查询在,还是要提前查询好 inner 再给 outer 用,那还不如不要外键。 |
|
xuxuzhaozhaoDec 22, 2020
16
@WhoMercy 同意!
|
|
securityCodingDec 22, 2020
18
基本没用过了 , 一般通过中间表解决
|
|
ccoDec 22, 2020
19
可以用外键,但是很久不用了。你觉得需要约束就用一下,没必要就不需要。
|
|
20
测试环境用外键,生产不用。
|
|
21
一直使用 JPA,只要有关联的情况, 一直使用外键。
1 。 保持数据一致性太重要 2 。 另外 JPA 的并发管理,Version 更新都是有关联有关。 (当然不同 Domain 之间数据库也断开直接关联,简单的一个外键引用,与代码一致)。 不用外键,编程上灵性,为了数据一致性,额外要做很多工作,数据库管理也麻烦。当然可以增加无脑打酱油的时间。 |
|
22
尽量不要使用外键
- 有额外开销 - 逐行操作 - 可“到达”其他表,意味着锁 - 高并发时容易产生死锁 |
|
sampengDec 22, 2020
23
用外键就是程序员偷懒,无一例外
|
|
limuyan44Dec 22, 2020 via Android
24
很多年不用了,没有什么足够的价值去使用。
|
|
manamiDec 22, 2020 via Android
25
外键恐惧症
|
|
bnm965321Dec 22, 2020
29
看来都是 Java 大佬。
使用 Python, Ruby 的肯定都会用外键 |
|
nxy006Dec 22, 2020
30
毕业以后就没用过外键了
不用外键,意味着不使用任何跨表查询。 |
|
nxy006Dec 22, 2020
32
@bnm965321
Rails 就是不使用外键的,用自定义校验器功能丰富,代替数据库校验。当然 Rails 的跨表查询功能比较强,会有一些跨表查询,但外键还是不用。 |
|
mandexDec 22, 2020
35
不用
|
|
itIsUnbelievableDec 22, 2020
36
萌新问个问题,比如说一个人的爱好有很多种,如果不用外键的话要怎么存到一张表呢?
|
|
tingyunsayDec 22, 2020
37
外键用过,常需要改动的数据绝对不用外键,不灵活
|
|
hodurDec 22, 2020
38
@itIsUnbelievable 不用外键约束,但是还是存在表 join 的
|
|
xh520630Dec 22, 2020
39
|
|
40
我司开发规范里面是禁止外键的,建表的时候就不允许
但是实际开发实践中,“逻辑外键”还是广泛存在的,也就是用一个表中的字段值作为另外一个表的查询条件。含有 join 的语句也是允许的(但仅限 select 。update 和 delete 语句中不允许 join ) |
|
ArJunDec 22, 2020
42
没事的,多用、到时候换人了换不动变相加薪···
|
|
wangbudongDec 22, 2020
43
以前用得多,现在基本少用
|
|
wangbudongDec 22, 2020
44
还是因为外键联动起来数据处理麻烦
|
|
steptodreamDec 22, 2020
45
我用 django 都是小项目 外键方便的不行
|
|
46
@itIsUnbelievable 外键只是约束数据,不用外键也可以存
|
|
47
@steptodream 确实我自己写的几个 flask 小项目也是用的外键 真的减少很多工作量 不知道体量大的项目 应该怎么实践
|
|
lbunderwayDec 22, 2020
48
用外键,不用约束
|
|
ren2881971Dec 22, 2020
49
逻辑外键。
|
|
qilishashaDec 22, 2020 via iPhone
50
如果有一位麻烦的甲方或想法多的项目设计经理,可以尝试的用一下外键,你将会知道头发的珍贵
|
|
leetonDec 22, 2020
51
不用外键 感觉很反人类
|
|
LemengDec 22, 2020
52
不用,但可以,个人习惯
|
|
mamasanDec 22, 2020
53
我想问下, 不使用外键, 最简单的用户, 角色, 权限这种需要 5 张表的怎么查询啊?
|
|
qaz168000Dec 22, 2020
55
确实很多年没有用过外键了,一般都是逻辑外键
|
|
dorothyRENDec 22, 2020
56
我寻思着,有外键会写 sql,没外键就不会写 sql 了?
|
|
57
不推荐,最好不用。
使用的好处是在数据库层来维护表间数据关联。但是,除非你是传统的 CS 程序,业务逻辑仍然以存储过程的形式编写,存在。现在一般是使用程序来建模,实现业务,相关逻辑更应该在代码,而非数据库层来进行维护。 使用数据层的坏处有 * 数据维护困难,某些数据的存在与删除由于外键、约束会导致很难维护 * 数据库层较难切换,同上 * 数据库升级麻烦,同上 现代设计更推荐将数据库仅视为存储与查询的简单组件,尽量较低业务依赖。 |
|
0bitDec 22, 2020
58
想一想有没有过度优化,想一想自己在做的项目的并发要求有多大,开发周期有多久,权衡取舍一下就行了,没必要非此即彼。
|
|
skypybDec 22, 2020
59
在公司不用, 我自己项目会用。
主要是为了方便快速的开发, 维护丢给数据库后可以少耗些精力。 本身个人项目一般也达不到外键会影响到的量级, 开发效率至上 |
|
tokyo2020Dec 22, 2020
60
@love 因为为啥还要再建这个副本数据的索引呢,我还要确保这个值在这 2 张表中是不是都存在,可能还要维护数据。 见《 SQL 反模式》 这本书 5.2 章节
|
|
stdoutDec 22, 2020
61
连 join 都很少用了。关联越少越好
|
|
62
@skypyb 我是开发了几个自己的小项目之后有这样的疑问,自己的小项目用外键感觉可以省去很多工作量。现在的公司也用外键,但是业务都是公司内容的业务,可能是这个原因导致的吧。上一家公司都是外部业务,可能就是禁止使用外键的原因吧。
|
|
charlie21Dec 22, 2020
64
有 ORM 还要什么外键
|
|
yujieyu7Dec 22, 2020
65
从来不用,mysql 只负责存储就好了,逻辑还是交给应用程序吧
|
|
ming7435Dec 22, 2020
66
Never
|
|
MIUIOSDec 22, 2020
68
大学生才用外键
|
|
huobaziDec 22, 2020
70
《学生选课系统》 必须用,不用就挂科了
|
|
F281M6Dh8DXpD1g2Dec 22, 2020 via iPhone
71
说不能用的可以想象你们的数据有多脏
|
|
rexyanDec 22, 2020
72
像 DRF 这种自带的 ORM 的咋整,不用感觉不方便
|
|
hejw19970413Dec 22, 2020
75
不会用外键
|
|
hejw19970413Dec 22, 2020
76
如果你的领导很厉害,说这里必须用外键或者说自己感觉这里能用而且用后的结果比不用外键好的太多,那就可以用。
|
|
justNoBodyDec 22, 2020
77
@abyan1314 #22 数据库死锁一定要小心
|
|
kkbblzqDec 22, 2020
78
1. 外键会导致多表关联锁,这对并发场景是挺严重的问题,特别是很多时候性能瓶颈可能就落数据库上,外键无疑雪上加霜。
2. 依赖外键来做完整性虽然省事,但是同时你也耦合了数据库的逻辑,数据库层切换就很麻烦,要做数据层改造也很麻烦,比如你哪天想在上面加一层缓存。 |
|
qiyueyDec 23, 2020
81
我们是禁止使用外键
|
|
xiangbohuaDec 23, 2020
82
现在大多数 application 都是 orm 访问数据库,但是 orm 对于外键的支持一直都不好。
一般都不用 |
|
joesonwDec 23, 2020
83
mysql 就别用了. 如果上了 oracle 什么的商业数据库, 外键倒是搞不死.
|
|
laravelDec 23, 2020
84
用了能有多大用?没多大用就别用了。
|