社区
Web 开发
帖子详情
数据库设计要不要外键?
小星宇
2018-03-06 10:59:13
正在做毕业设计——网上求职招聘网站,刚开始建数据库,有点迷茫,使用的是mysql数据库,外键究竟是使用还是不使用?越想越困惑。。。想请教各位
...全文
1585
40
打赏
收藏
数据库设计要不要外键?
正在做毕业设计——网上求职招聘网站,刚开始建数据库,有点迷茫,使用的是mysql数据库,外键究竟是使用还是不使用?越想越困惑。。。想请教各位
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用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)
数据库
主键和
外键
设计
的原则.doc
数据库
主键和
外键
设计
的原则
项目中
设计
数据库
是否要使用
外键
?
一、问题引入 学过
数据库
的同学都知道
外键
,
外键
能够保证数据的一致性。比如一个学生属于一个班级,班级和学生的关系是一对多,如果你删除了一个班级,那么这个班级中的学生肯定得跟着删除,不然就会产生一群无组织的学生。以往做项目的时候,
外键
是肯定得用的,不用
外键
是万万不可能的。 可是有一天偶然看到书上说不建议使用
外键
,神马(O_o)??还有这样的操作?那该怎么去保证数据一致性啊,不会产生很多脏数据吗?想想就头大。不过人家书的作者技术肯定比我高多了,既然这样说,肯定有他的道理。每当我听到一个观点时,我都不会急着去反驳否
什么是
数据库
的逻辑
外键
?
数据库
的物理
外键
和逻辑
外键
各有什么优缺点?
什么是
数据库
的逻辑
外键
?
数据库
的物理
外键
和逻辑
外键
各有什么优缺点?
为什么
数据库
不应该使用
外键
?
当我们想要持久化地存储数据时,使用关系型
数据库
往往都是最稳妥的选择,这不仅因为今天的关系型
数据库
种类非常丰富并且稳定,还因为不同社区对关系型
数据库
的支持都非常完备。我们在前面的文章中曾经分析过 为什么 MySQL 的自增主键不单调也不连续,这篇文章我们来分析关系型
数据库
中另一个重要的概念 —
外键
(Foreign Key)。 在关系型
数据库
中,
外键
也被称为关系键,它是关系型
数据库
中提供关系表之间连接的多个列[^1],这一组数据列是当前关系表中的
外键
,也必须是另一个关系表中的候选键(Candidate Ke
数据库
到底需不需要设置
外键
?
在大型系统中(性能要求不高,安全要求高),最好使用
外键
(
外键
可以增强
数据库
数据的完整性和一致性)在大型系统中(性能要求高,安全自己控制),不用
外键
(有
外键
约束的话,插入字段会进行检查,影响效率)小系统,最好用
外键
用
外键
要适当,不能过分追求不用
外键
而用程序控制数据一致性和完整性时,应该写一层来保证,然后具体应用通过这个层来访问
数据库
(比如
外键
约束都转交给dao层)...
Web 开发
81,122
社区成员
341,744
社区内容
发帖
与我相关
我的任务
Web 开发
Java Web 开发
复制链接
扫一扫
分享
社区描述
Java Web 开发
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章