GoForum🌐 V2EX

你们现在设计系统数据库的时候还在数据库层面搞外键约束吗?

libasten · 2026-03-23 13:34 · 0 次点赞 · 7 条回复

手里一个项目升级,数据库稍有变动,ai 帮忙的,给加了外键,然后它自己老是迁移升级过不去,外键校验卡住了。 然后我就问了下其他 ai 。 回答有点意思。

豆包

可能是互联网短平快开发的代表?主要意见是不要数据库层面搞外键,会给数据库维护带来麻烦,比如之前遇到的外键校验之类的,强烈建议我在业务逻辑中做校验限制啥的。

qwen

他家是不是金融类工业类的用语料多?和豆包不一样,强烈建议我在数据库层面就加上外键,除非是经常发生上亿级别的数据库变动啥的,会影响效率,否则都建议做外键。

7 条回复
Mithril · 2026-03-23 13:44
#1

要么开始就加,要么一直就不加。

从头搞项目的话,看数据类型。数据量预期不会特别大,而且对数据完整性要求比较高的,肯定还是加。其他数据量比较大的东西,比如 xx 记录这种,就尽量搞一张扁平大表,方便后续拆出去,上队列或者缓存,或者 OLAP 等其他的服务。

mqnu00 · 2026-03-23 13:49
#2

不上,有额外开销

urlk · 2026-03-23 13:49
#3

从来没用过外键, 互联网行业需求变化快, 甚至表结构都经常改来改去, 上外键不是自找没事吗

JoeDH · 2026-03-23 13:59
#4

从来不用

whoosy · 2026-03-23 14:04
#5

从来不用物理外键

wogogoing · 2026-03-23 14:09
#6

在业务/代码层面做关联约束。

woodfizky · 2026-03-23 14:24
#7

不做。 你正文里这个例子就已经说明外键的问题之一了,遇到数据库迁移或者在现有表上改设计的时候外键要让你头疼死。 性能也不太好。

ORM 可以加虚拟外键。或者你自己写业务查询的时候自己 join 一下就好了。

添加回复
你还需要 登录 后发表回复

登录后可发帖和回复

登录 注册
主题信息
作者: libasten
发布: 2026-03-23
点赞: 0
回复: 0