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

2020 年 12 月 22 日
 Macv1994

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

9729 次点击
所在节点    程序员
84 条回复
hantsy
2020 年 12 月 22 日
一直使用 JPA,只要有关联的情况, 一直使用外键。
1 。 保持数据一致性太重要
2 。 另外 JPA 的并发管理,Version 更新都是有关联有关。

(当然不同 Domain 之间数据库也断开直接关联,简单的一个外键引用,与代码一致)。

不用外键,编程上灵性,为了数据一致性,额外要做很多工作,数据库管理也麻烦。当然可以增加无脑打酱油的时间。
abyan1314
2020 年 12 月 22 日
尽量不要使用外键
- 有额外开销
- 逐行操作
- 可“到达”其他表,意味着锁
- 高并发时容易产生死锁
sampeng
2020 年 12 月 22 日
用外键就是程序员偷懒,无一例外
limuyan44
2020 年 12 月 22 日
很多年不用了,没有什么足够的价值去使用。
manami
2020 年 12 月 22 日
外键恐惧症
tokyo2020
2020 年 12 月 22 日
@abyan1314 我觉得这是使用外键的好处啊,mysql 官方文档都说了 使用外键可以充分利用索引,提高查询速度。
love
2020 年 12 月 22 日
@tokyo2020 外键和查询速度有什么关系?的确建外键会自动给你建个索引,但你不会自己建吗
Macv1994
2020 年 12 月 22 日
@sampeng 你这么说也有道理,用外键确实减少了一部分工作
bnm965321
2020 年 12 月 22 日
看来都是 Java 大佬。

使用 Python, Ruby 的肯定都会用外键
nxy006
2020 年 12 月 22 日
毕业以后就没用过外键了

不用外键,意味着不使用任何跨表查询。
inorilzy
2020 年 12 月 22 日
@bnm965321 python 也不用,这和语言没有关系吧。
nxy006
2020 年 12 月 22 日
@bnm965321
Rails 就是不使用外键的,用自定义校验器功能丰富,代替数据库校验。当然 Rails 的跨表查询功能比较强,会有一些跨表查询,但外键还是不用。
duhui
2020 年 12 月 22 日
@bnm965321 为啥 Ruby 会用, 主流的 Ruby on Rails 就不用啊
duhui
2020 年 12 月 22 日
@nxy006 没外键也能跨表啊
mandex
2020 年 12 月 22 日
不用
itIsUnbelievable
2020 年 12 月 22 日
萌新问个问题,比如说一个人的爱好有很多种,如果不用外键的话要怎么存到一张表呢?
tingyunsay
2020 年 12 月 22 日
外键用过,常需要改动的数据绝对不用外键,不灵活
hodur
2020 年 12 月 22 日
@itIsUnbelievable 不用外键约束,但是还是存在表 join 的
xh520630
2020 年 12 月 22 日
@itIsUnbelievable
不用外键只是少了个约束.
你内容该怎么存还是怎么存.
id, 用户 id, 爱好 id/爱好名称
CismonX
2020 年 12 月 22 日
我司开发规范里面是禁止外键的,建表的时候就不允许

但是实际开发实践中,“逻辑外键”还是广泛存在的,也就是用一个表中的字段值作为另外一个表的查询条件。含有 join 的语句也是允许的(但仅限 select 。update 和 delete 语句中不允许 join )

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

https://study.congcong.us/t/737758

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

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

© 2021 V2EX