大家在设计数据库的时候,一般会不会加外键

2019-03-25 12:24:09 +08:00
 zhuwd
7759 次点击
所在节点    程序员
57 条回复
l00t
2019-03-25 17:25:42 +08:00
@zjsxwc #40 可是我不明白和数据一致性有什么关系。如果说数据完整性,那我可以理解。但是我看大家都在说一致性,或者两个并称。那这里的“一致性”到底是怎样一个场景?
rootx
2019-03-25 19:33:53 +08:00
@blueorange 哥 发个完整版的学习学习
gabon
2019-03-25 20:09:28 +08:00
不推荐加
opengps
2019-03-25 20:14:20 +08:00
小系统加了方便;
大系统加了,数据涨到一定程度外键极其难以扩展
idamien
2019-03-25 22:04:26 +08:00
这个在一开始的时候系统建模,不都是按 MCD 来的么? 这个还有异议 ? 不用外键导致的结果是,很多时候数据冗余
WilliamYang
2019-03-25 22:59:28 +08:00
@cominghome 你是不是不知道 Django 可以不用外键?
grimpil
2019-03-25 23:00:36 +08:00
多年前知乎上有过讨论
https://www.zhihu.com/question/19600081
blueorange
2019-03-25 23:50:59 +08:00
@rootx 阿里 java 开发手册
caqiko
2019-03-26 00:46:24 +08:00
schema 不都是通过外键关联出来的吗?
k9990009
2019-03-26 01:02:03 +08:00
看到楼上知乎链接里说,数据库早期的设计是满足 C/S 构架的,真是一针见血,DB 也承载服务端的工作,需要数据一致性和安全。而现在流行的主流的构架是 B/S,DB 只专注于存储,似乎外键、存储过程、触发器都没有什么必要,很奇怪当初还要设计这些东西,安全和数据都可以由应用控制。阿里的 java 开发规范也明确不要使用外键和存储过程。java 适合应用层,阿里的规范也就是 B/S 构架下的一种最佳实践吧。曾经听说过,前端 js 里写 sql 直接调数据库,或者存储过程,把后端的处理分到前端和 DB 上,我觉得这设计真糟糕,没反应过来这是 C/S 的构架,至少有一点好处,减少了中间的消耗,提高了速度。
lynskylate
2019-03-26 02:37:19 +08:00
@cominghome django 可以实现逻辑外键,数据库层不会有实际约束。为什么不让写外键会凉?
xuanbg
2019-03-26 03:17:14 +08:00
mysql 也就能存储一下数据,我们也就用它存一下数据而已。要外键做什么?
947211232
2019-03-26 08:45:25 +08:00
开发中都是用逻辑外键,没试过物理外键关联的。
alexmy
2019-03-26 10:27:53 +08:00
小项目 ORM 有带的就直接用了,不止一个人开发的项目都不想用,包括存储过程啊什么的都不用,换一个人维护累。
atcdef
2019-03-26 11:39:54 +08:00
看情况,我的都是小项目,数据库一年不过 1,2G 这样的增长,所从来都是加外键的,这样可以省不少事。
yulitian888
2019-03-26 11:59:57 +08:00
不想上外键的原因很多,但是性能原因绝对是被忽悠瘸了的思路。
怕性能受影响,干嘛还用关系型数据库啊,上 nosql 方案呗!
所谓的“物尽其用”嘛!用关系型,就要用到它的特点,用 nosql 同样也要用它的特点。强行把 sql 当 nosql 玩,还自以为领悟到了反范式的能力,岂不是荒唐?
各种 ORMapping 的框架对外键的支持已经非常好了,强行丢掉外键导制开发者需要去人脑关注一群 [孤立] 的表,值得吗?
什么,你们公司不用 ORMapping,直接撸 JDBC/ADO.net 的?那行,开心就好喽!
KigKrazy
2019-03-26 12:56:21 +08:00
我之前不加,现在加。

我不能保证其他人员跟我一样对数据的关联操作能跟我一样熟悉,加上外键强制校验数据完整性,避免其他人瞎操作。

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

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

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

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

© 2021 V2EX