社区
Web 开发
帖子详情
数据库设计要不要外键?
小星宇
2018-03-06 10:59:13
正在做毕业设计——网上求职招聘网站,刚开始建数据库,有点迷茫,使用的是mysql数据库,外键究竟是使用还是不使用?越想越困惑。。。想请教各位
...全文
1725
40
打赏
收藏
数据库设计要不要外键?
正在做毕业设计——网上求职招聘网站,刚开始建数据库,有点迷茫,使用的是mysql数据库,外键究竟是使用还是不使用?越想越困惑。。。想请教各位
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
40 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
weixin_40290083
2019-08-24
打赏
举报
回复
关系型数据库的关系就是通过主外键实现的,从数据的意文来讲没有多大意文,要保证数据的一致性,完整性,不冗余,那么主外键就必须有。越是复杂的业务,数据结构也必然复杂。越能体现主外键的好处,即使你不使用主外键,也有可能你要在自己的业务逻辑中自己实现对应关系
weixin_45270271
2019-08-23
打赏
举报
回复
如果你想操作多张表,那就要了,建立关系要的
编程写手
2019-08-14
打赏
举报
回复
建议不要用外键,外键就是一个约束,有的时候只要懂的表之间的关系,能省外键就省。有的时候不用外键是有好处的
皮皮熊_1989
2019-08-14
打赏
举报
回复
1
我来做个综合回答吧: 在大学学习的时候,为了让学生掌握表与表之间的关系和缜密的逻辑性,都会让在数据库设置外键约束,出发点是好的。 但在实际开发的过程中,1. 我们的需求经常变动,如果设立了外键约束,很多时候表不好改,牵一发动全身; 2. 互联网项目,尤其是高并发和很多用户的项目,过多设置外键约束,会严重影响数据库的性能,因为一些级联删除、更新等,都是数据库自己去做的。假设修改的表数据量超大,那么效率可想而知; 3. 一般来说,我们都是在应用层(不需要同一事务)或者数据交互层(同一事务,一个不成功全部回滚)从逻辑上去达到类似外键约束的效果; 4. 很多时候,外键约束的级联行为,不满足实际需要,比如:我删除一个数据,用这个数据的主键为外键并建立了外键约束级联删除时这个相关的数据都会被同时删除,可实际上,我们很多项目需要查看一些历史性的数据。比如,你去年买了个商品,商品类型是A,而今年这个A被删除了,但我还是需要知道去年我买的什么。 一般这种情况,数据库会有额外的字段作为逻辑删除字段,多半是bit类型的,如:is_deleted等标记是否逻辑删除。然后取数据的时候,自动通过sql或者EF的where过滤掉is_deleted=true的数据(一般来说,主表过滤,连接表一般不过滤。当然,实际业务为准)。 至于说外键省代码量,其实就是级联产生的效果。 综上,实际开发中,设数据库的外键约束,绝对绝对的弊大于利,一般都不设。
健者天行
2018-03-08
打赏
举报
回复
外键列需要, 外键关联约束可以不需要。
cattpon
2018-03-08
打赏
举报
回复
不需要~毕设要求不高
舌尖上的中国001
2018-03-08
打赏
举报
回复
根据情况定啊,再说毕业设计和公司项目不一样
技乐书香
2018-03-07
打赏
举报
回复
互联网项目现在一般都不加外键,外键会导致子表的更新操作对父表产生锁,非常影响数据库的性能
李逍遥丶
2018-03-07
打赏
举报
回复
设置外键为数据库增加压力,现在的事务一般都在java里面处理
我纯洁全身都纯洁
2018-03-07
打赏
举报
回复
我之前做的一个国际电信业务,表全部都有外键,删除某条数据的时候,java必须先判断关联这条记录的数据有没有被删除(物理删除)。 后来在另一家公司做的一个仿淘宝的商城,表没有外键,数据管理又不严格,属于那种开发人员随意可以动生产数据那种(比如直接从库中删除某条数据),结果经常造成数据有问题。 现在做的公司某国有大型电商运维系统,数据逻辑删除,从页面上部分删除数据的时候,有的做校验,有的不做校验,不过问题不大。 我建议你开发的时候,还是遵循数据库三范式(虽然实际中并不全都适用,但至少在学习中知道怎么回事并会用,不要跟培训出来的一样只会用方法,不知其所以然),加外键,以后工作了按规定来就行了。
xiayiguo
2018-03-07
打赏
举报
回复
我们项目都不设置外键,没有必要
懒笑翻
2018-03-07
打赏
举报
回复
现在不怎么用外键了的 我们公司写项目都是直接列相关联 不直接设置外键
bzchao
2018-03-07
打赏
举报
回复
有其他参照表就需要外键
Fly天夏
2018-03-07
打赏
举报
回复
我建议不要用外键,业务控制好就ok
stronger35
2018-03-07
打赏
举报
回复
阿里JAVA开发手册建议不要使用外键
xiaoxiangqing
2018-03-07
打赏
举报
回复
看实际情况,一般是需要
hovoy
2018-03-07
打赏
举报
回复
外键又好又不好啊。两面性。
nettman
2018-03-07
打赏
举报
回复
关注,学习
java夜洛
2018-03-07
打赏
举报
回复
这个要分情况,我们现在做的项目就没有设置外键。 说明:(概念解释)学生表中的 student_id是主键,那么成绩表中的 student_id则为外键。 如果更新学生表中的 student_id,同时触发成绩表中的 student_id更新,则为级联更新。 外键与级联更新适用于单机低并发,不适合分布式、高并发集群;级联更新是强阻塞,存在数 据库更新风暴的风险;外键影响数据库的插入速度。
绝望星空
2018-03-07
打赏
举报
回复
真正的项目一般都不用外键
加载更多回复(19)
数据库
设计
可以
不要
外键
的7个理由
探讨了在
数据库
设计
中不使用
外键
的实际原因,包括性能提升、方便数据导入及重新加载、应用框架处理完整性、跨
数据库
操作、减少工作成本等,并解释了逻辑
外键
的概念及其优势。
mysql的无
外键
设计
_
数据库
设计
可以
不要
外键
的7个理由
数据库
设计
中,通常使用
外键
确保数据完整性,但实际应用中,有些场景下选择无
外键
设计
可能更优。无
外键
可以提高性能、方便导入旧数据和全表重新加载,同时在ORM框架中,参照完整性由更高层次的逻辑处理。然而,这也可能导致数据一致性风险增加,需要权衡利弊。
数据库
设计
到底要
不要
保留物理上的
外键
本文围绕
数据库
设计
中是否使用
外键
的问题展开讨论。正方认为
外键
有助于保证数据一致性和完整性,尤其在多应用环境下更为重要;反方则指出在高性能需求下,
外键
可能导致性能下降,并建议通过程序手段保障数据质量。
数据库
不使用
外键
的 9 个理由
探讨
数据库
设计
中不使用
外键
的原因,包括性能、传统数据兼容性、全表重新加载、高层框架使用、跨
数据库
关系等,以及这些决策背后的权衡。
数据库
到底需不需要设置
外键
?
本文探讨了不同规模系统中
外键
的应用策略。对于安全性要求高的大型系统推荐使用
外键
以确保数据完整性和一致性;而对于追求高性能的场景,则建议减少
外键
依赖,并通过程序层实现数据完整性控制。
Web 开发
81,111
社区成员
341,727
社区内容
发帖
与我相关
我的任务
Web 开发
Java Web 开发
复制链接
扫一扫
分享
社区描述
Java Web 开发
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章