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

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

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

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

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

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

使用 Python, Ruby 的肯定都会用外键
nxy006
2020-12-22 13:31:16 +08:00
毕业以后就没用过外键了

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

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

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

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

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

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

© 2021 V2EX