MySQL 不用外键的话,如何让表起来关联呢?

2019-09-16 10:52:48 +08:00
 cl903254852

Mysql刚入门,看到有人说表关联不要用外键约束。

我就有点懵逼了

  1. 如果不用数据库的外键关联,那表之间应该怎么关联呢?
  2. 不用外键约束,怎么保证表的数据完整性和一致性的维护?
16529 次点击
所在节点    MySQL
53 条回复
shintendo
2019-09-16 10:55:03 +08:00
说的是不用外键 [约束] ,关联还是那样关联
cl903254852
2019-09-16 10:56:43 +08:00
@shintendo 是我表达有问题,就是不用外键
littlewing
2019-09-16 10:56:54 +08:00
业务层自己维护
phx13ye
2019-09-16 10:59:03 +08:00
代码自己保证呗,然后不做物理删除,美其名为互联网做法
mingl0280
2019-09-16 10:59:37 +08:00
业务层维护,好处是数据库服务器可以降低性能需求,坏处是容易弄炸掉关联。
这种说法大部分是超高并发环境(都要减低数据库压力了,得有多少用户啊……),入门别管就可以了。
jay0726
2019-09-16 10:59:52 +08:00
不用物理外键而是用逻辑外键
Caballarii
2019-09-16 10:59:57 +08:00
代码里用到的时候约束
一致性完整性自己有空写脚本去对随便怎么都行
数据库上留点没用的数据没什么大不了的
love
2019-09-16 11:05:13 +08:00
有没有约束和关联查询没有关系。

当然没约束有产生无效 ID 的可能,但对绝大部分应用实际上不是问题。
shintendo
2019-09-16 11:19:43 +08:00
@cl903254852 你表达没问题,我就是在回答你的问题
taotaodaddy
2019-09-16 11:23:15 +08:00
楼主确实要先说清楚是不用物理主键还是连逻辑主键都不用
taotaodaddy
2019-09-16 11:25:21 +08:00
啊,把“外”敲成“主”了
nekolr
2019-09-16 11:37:18 +08:00
就是指建表的时候不建立外键。

使用时还是正常联表查询,和有没有约束时是一样的。再说表之间的关联在逻辑上本来就是存在的,不需要定义。外键约束的作用是维护一致性和完整性,不使用外键,那就只能通过代码层面去保证完整性和一致性。
Raymon111111
2019-09-16 11:40:59 +08:00
一致性业务逻辑去保证

延迟检查补偿最终一致是一种常见的方案
leo108
2019-09-16 11:50:50 +08:00
楼上无脑推荐不用外键的,如果外键真这么没用,Mysql 为啥还需要设计这个东西?
To 楼主,技术选型要看具体业务,不是阿里说不用外键,整个软件业就都不能用,你要想想别人为什么要这么规定,不用外键带来了什么收益,付出了什么代价,对你自己的业务来说代价和收益哪个更高?
wysnylc
2019-09-16 11:57:46 +08:00
@leo108 #14 外键带来的问题比解决的问题多,比如要删除 a 表数据但是该表有子表的外键那么就不能删除,这样会导致开发无比的冗余复杂,而在当前的互联网环境下没有这么多时间跟你磨蹭. 严谨和效率从来都是相克的
目前我所知的外键环境只有银行,银行才需要每条数据的精准严谨,所以银行可以放弃效率
但是互联网放弃效率等于百米赛跑你坐轮椅别人一路狂奔甩你 90 米
zazalu
2019-09-16 12:02:56 +08:00
楼主是不是一时头晕想糊涂了,就算不使用外键这种"强"约束,也可以通过一些方式来实现“弱”约束从而达到关联的目的,当然这一切都是因为外键貌似影响性能以及纯粹的麻烦!- -
Vegetable
2019-09-16 12:21:51 +08:00
数据库往往是性能瓶颈,所以要给数据库减负,这是大前提.

外键是一个数据库提供的功能,他需要数据库额外的开销对数据合法性进行检查,开销还不小,这就违背了上边说的大前提.

所以这种可以不用数据库做的工作,尽量不用数据库做.不过注意,这么做不是永远正确的.
littlewing
2019-09-16 13:18:55 +08:00
@phx13ye 还不是因为互联网穷,用不起 oracle 和 DB2
Mosy
2019-09-16 13:20:56 +08:00
@wysnylc 大哥,你那里得知的消息银行不需要效率了?银行中间业务系统也不用外键,一天上亿笔交易处理还是需要处理效率的。
lolizeppelin
2019-09-16 13:21:26 +08:00
@wysnylc

外键可以自动删除关联子健的

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

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

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

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

© 2021 V2EX