社区
Web 开发
帖子详情
数据库设计要不要外键?
小星宇
2018-03-06 10:59:13
正在做毕业设计——网上求职招聘网站,刚开始建数据库,有点迷茫,使用的是mysql数据库,外键究竟是使用还是不使用?越想越困惑。。。想请教各位
...全文
1729
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)
考虑 Stribeck 摩擦特性的无刷直流电机驱动 EMB 执行器耦合建模及仿真分析(Simulink仿真实现)
内容概要:本文针对无刷直流电机驱动的电子机械制动(EMB)执行器,建立了考虑Stribeck摩擦特性的非线性耦合动力学模型,并在Simulink环境中完成了系统级仿真分析。研究综合集成了电机动力学、齿轮传动机构与制动执行机构的动力学特性,构建了高保真的机电一体化系统模型。重点引入Stribeck摩擦模型以精确描述低速工况下执行器内部存在的静摩擦、粘滞摩擦与库仑摩擦之间的过渡行为,有效提升了系统在启停、反向运动等瞬态过程中的动态响应仿真精度。通过多工况仿真验证了模型的有效性,能够准确反映摩擦引起的爬行、滞后与定位误差等非线性现象,为EMB系统的高性能控制算法
设计
(如摩擦补偿、滑模控制)与结构优化提供了高可信度的仿真平台。; 适合人群:从事汽车电子制动系统、电机驱动控制、机电系统建模与仿真研究的研究生、科研人员及工程技术人员,需具备扎实的机械动力学、自动控制理论基础和MATLAB/Simulink仿真能力。; 使用场景及目标:①用于高精度电子机械制动系统的
设计
验证与性能预测;②为消除摩擦非线性影响的先进控制策略(如自适应控制、智能控制)提供精确的被控对象模型;③深入探究Stribeck摩擦等非线性因素对系统动态性能(如响应延迟、稳态误差)的作用机理; 阅读建议:读者应结合提供的Simulink模型文件,深入剖析Stribeck摩擦模块的数学实现与参数辨识方法,建议通过改变输入指令(如阶跃、正弦)和负载条件进行对比仿真,以直观理解非线性摩擦对系统动态特性的影响。
【Python编程】Python数据类dataclass与attrs库对比
内容概要:本文深入对比Python数据类声明的两种主流方案,重点分析dataclasses模块(PEP 557)与attrs第三方库在功能覆盖、性能开销、扩展生态上的差异。文章从样板代码(boilerplate)消除出发,详解@dataclass装饰器的frozen/unsafe_hash/order/slot参数语义、field()函数的默认值工厂与元数据配置、以及__post_init__的初始化后处理钩子。通过代码示例展示attrs的validators验证器、converters类型转换器、以及auto_attribs的PEP 526注解兼容模式,同时介绍cattrs的序列化/反序列化适配、Pydantic的BaseModel运行时校验增强、以及marshmallow的Schema显式定义,最后给出在配置对象、DTO传输、领域模型等场景下的数据类选型建议与版本兼容性策略。 直播下载:fengcaisy.com 直播下载:m.guan-long.cn 24直播网:m.dlboligang.com 24直播网:cpl520.com 24直播网:m.dlsyhm.com
易语言源码用超级列表框模仿Delphi表格
易语言源码用超级列表框模仿Delphi表格
易语言源码应用程序图标修改器源码
易语言源码应用程序图标修改器源码
易语言源码支持盛大英雄和商铺的传奇登陆器
易语言源码支持盛大英雄和商铺的传奇登陆器
Web 开发
81,111
社区成员
341,726
社区内容
发帖
与我相关
我的任务
Web 开发
Java Web 开发
复制链接
扫一扫
分享
社区描述
Java Web 开发
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章