到底用不用数据库级别外键?

Zotero PDF Translate插件实战:DeepL API免费申请与高效翻译配置指南 本文提供Zotero PDF Translate插件配置DeepL API的完整实战指南。详细介绍了如何免费申请DeepL API密钥,解决国内访问问题,并在插件中完成精细配置,实现文献阅读时的无缝划词翻译,大幅提升科研人员和学生的英文文献阅读效率。 阅读详情

阿里巴巴 Java 规范

【强制】不得使用外键与级联,一切外键概念必须在应用层解决。

数据库级别外键

  大家学习数据库的时候都学习过外键,使用外键有很多优点,最主要的优点就是:

  • 保证数据的完整性和一致性。
  • 将数据完整性判断交给数据库完成,减少程序的代码量,减少程序员工作量。

  使用外键可以减少程序员工作量,真是个好东西,但是现实却总是事与愿违。外键确实可以保证数据的完整性和一致性,但却伴随着一系列系统缺陷。权衡后,我们选择一般不使用数据库级别外键,除非你的 leader 要求使用。

缺陷

  • 使用数据库时需要考虑外键约束,增加麻烦。
  • 数据库工作量增加,影响数据库性能。
  • 每次插入数据需要查询对应所有外键表中是否有数据,开销较大。可改为由程序员控制、优化查询,优化数据库,减少数据库的消耗。
  • 每次查询对应外键表时进行锁定,增加高并发系统死锁风险。
  • 在进行数据库迁移和备份的时候依赖特定数据库,改为程序控制可以增加可移植性。

应用层级别外键约束

  外键逻辑: 一张表去引用其他的表的数据。
  应用层实现: 程序员使用程序去控制查询对应外键表,代替数据库外键。

最佳实践

  • 数据库就是单纯的表,只用来存取数据。
  • 需要使用外键约束,使用程序去替代数据库外键,在应用层实现外键。
Claude桌面端安装失败?Retrying无限重试终极解决方案(亲测有效) Claude桌面端安装卡在Retrying并非网络问题,而是安装器下载源异常导致。本文提供已验证方案:一条命令即可解决问题🚀 阅读详情

相关推荐

文本→图像→视频:AIGC跨模态转换全流程解析

本文旨在系统性地解析AIGC领域中跨模态内容生成的技术原理和实现方法,特别聚焦于从文本到图像再到视频的完整转换流程。跨模态表示学习的基本原理文本到图像生成的核心技术图像到视频转换的关键算法端到端跨模态生成系统的构建方法实际应用场景和性能优化策略背景介绍:建立基本概念和知识框架核心概念:解析跨模态转换的关键技术和原理算法细节:深入讲解文本到图像、图像到视频的核心算法数学模型:提供必要的数学基础和公式推导项目实战:通过完整案例展示实现过程应用场景:探讨技术的实际应用可能性。

AI天才研究院 1353

SQL 语句:不得使用外键与级联,一切外键概念必须在应用层解决

阿里Java规范 【强制】不得使用外键与级联,一切外键概念必须在应用层解决。 说明:以学生和成绩的关系为例,学生表中的 student_id是主键,那么成绩表中的 student_id则为外键。如果更新学生表中的 student_id,同时触发成绩表中的 student_id 更新,即为级联更新。外键与级联更新适用于单机低并发,不适合分布式、高并发集群;级联更新是强阻塞,存在数据库更新风暴的风险...

shiwenbo1994的博客 4732

基于verilog的16QAM调制

思路1:正交调幅法——实现16QAM调制,可以理解为时相位相差90度的两个正弦波的4PAM叠加。 4比特输入经过2->4进制转化得到两路2比特输入,然后分别经过4PAM后叠加所得输出即为16QAM调制结果。 具体程序稍后编写。 思路2:复合相移法——可以借助前面编写的QPSK,相当于两路幅度不同的QPSK的叠加,比如幅度分别取1和3 。 思路1正交调幅法的设计方案: 两正弦波相位差...

weixin_30725467的博客 2929

关于阿里巴巴开发手册"不得使用外键与级联,一切外键概念必须在应用层解决"的疑惑

原文地址:http://www.codes51.com/itwd/4517194.html 问题: 关于阿里巴巴开发手册”不得使用外键与级联,一切外键概念必须在应用层解决”的疑惑 描述: 原文如下: 【强制】不得使用外键与级联,一切外键概念必须在应用层解决。 说明:以学生和成绩的关系为例,学生表中的 student id 是主键,那么成绩表中的 student id 则为外键。...

维 1万+

告别手动点鼠标:用Python脚本批量跑ADS版图仿真,效率提升10倍(附完整代码)

本文详细介绍了如何利用Python脚本自动化ADS版图仿真流程,显著提升射频工程师的工作效率。通过调用ADS底层接口,实现参数化修改、批量任务调度和结果自动收集,解决了手动操作中的常见问题,如仿真不更新等。附完整代码,帮助开发者快速实现10倍效率提升。

weixin_42523543的博客 331

【胡学长 带你学 Global Mapper 】如何将影像地图转换为国家2000坐标系

多部门联合开展工作坐标数据不匹配怎么办?Hi,我是胡学长!今天教大家如何利用Global Mapper将谷歌影像数据转换为国家2000坐标系影像数据 。

一起来交流学习吧 1万+

mysql 外键_为什么大多数互联网公司不用外键约束

是否使用外键约束【强制】不得使用外键与级联,一切外键概念必须在应用层解决.-《阿里Java规范》首先外键(Foreign Key)是什么东西使用方案假设有一个score表 id是自增id,score是分数,student_id是学号。另一个student表,id是自增id,name是名字,student_id是学号。那么设计这个的时候就希望有一个关联关系,让score的student_id指向st...

weixin_39645343的博客 464

Chromatix 7实战:从零开始调优ISP模块的完整流程(附常见报错解决方案)

本文提供了高通平台Camera调试工具Chromatix 7的完整实战指南。详细阐述了从环境准备、项目初始化、基础校正(如LSC、BPC)到核心ISP管线(Demosaic、CCM、HDR)及后处理(CAC、ANR)的调优全流程,并附带了常见报错(如“未初始化实例”)的解决方案,旨在帮助工程师建立系统性的调试方法论。

weixin_29290863的博客 622

数据库设计——由阿里的Java编程规范引发的外键思考

1 阿里的Java编程规范 【强制】不得使用外键与级联,一切外键概念必须在应用层解决。 说明:以学生和成绩的关系为例,学生表中的student_id是主键,那么成绩表中的student_id则为外键。如果更新学生表中的student_id,同时触发成绩表中的student_id更新,即为级联更新。外键与级联更新适用于单机低并发,不适合分布式、高并发集群;级联更新是强阻塞,存在数据库更新风暴的风险;...

山月风成的博客 2991

AI颠覆市场调研:生成式智能体如何重构商业决策?

AI正在将市场调研从"成本中心"转变为"战略武器"。当企业能够用生成式智能体实时模拟百万级虚拟用户时,传统调研的样本偏差、时间滞后、成本高昂等问题将不复存在。对于开发者而言,这不仅是技术的狂欢,更是参与商业规则重构的历史机遇。行动建议立即体验Simile/Aaru的智能体平台,验证虚拟样本效果参与LLM持续性记忆架构的开源项目(如Memory Llama)关注AI调研API的标准化进程(如Hugging Face的Market Research Toolkit)

这里汇聚了前沿的技术分享与实用的开发技巧,带你探索从创意到企业的技术创业之路。 614

为YOLO11更换Backbone(一):轻量化之星GhostNet

摘要: 本文重点介绍了轻量化Backbone网络GhostNet及其在YOLO11中的应用。首先分析了Backbone网络在目标检测中的重要性,指出其需平衡特征提取能力和计算效率的需求。然后详细解析了GhostNet的核心思想,包括其通过"幽灵模块"生成冗余特征的设计原理,该模块使用1×1卷积生成少量内在特征,再通过廉价线性变换生成更多幽灵特征,显著降低了计算量。GhostNet的创新设计使其在保持精度的同时大幅减少了参数和FLOPs,为YOLO11等目标检测模型提供了高效的轻量化解决方

本博客聚焦 YOLOv11 全流程落地,涵盖架构优化、数据集处理、训练技巧与多场景部署,兼及国产数据库、Java 开发与 AI 模型应用,内容兼顾理论与工程实践,为开发者提供系统干货,助力高效提升技术能力。 1498

阿里巴巴Java开发手册解读:MySQL中不得使用外键与级联,一切外键概念必须在应用层解决

在数据库设计中,“不得使用外键与级联,一切外键概念必须在应用层解决”这样的要求意味着你需要将数据完整性的责任从数据库层面转移到应用程序的逻辑层面。采取这种方法的原因可能有多种,包括但不限于性能优化、特定的系统架构需求或者是对数据库模式的灵活度要求较高等。然而,这也意味着更多的工作量落在了开发者的肩上,因为他们需要编写额外的代码来处理这些情况,同时也增加了潜在的错误来源。总之,虽然这样做可能会增加开发的复杂度,但也可以提供更大的灵活性,并且允许更细粒度的控制事务处理。

学亮编程手记 1249

大数据运营可视化:Tableau+PowerBI数据看板搭建教程

当企业数据量从“GB级”跃升到“TB级”,运营人员面临的最大挑战不再是“如何收集数据”,而是“如何让数据说话”。数据看板作为“运营指挥中心的仪表盘”,能将零散的用户行为、业务指标、流量趋势浓缩成可快速解读的视觉语言。本文结合Tableau(自由探索的“数据瑞士军刀”)与PowerBI(微软生态的“组合家具”)两大工具,从需求分析→数据准备→指标设计→视图搭建→ dashboard 组合,一步步教你搭建符合业务逻辑的运营看板。

AI智能探索者的博客 1362

什么是数据库的逻辑外键?数据库的物理外键和逻辑外键各有什么优缺点?

什么是数据库的逻辑外键?数据库的物理外键和逻辑外键各有什么优缺点?

qq_30939943的博客 1765

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

数据库不推荐使用外键的9个理由!

这可能不是数据库没有外键的正确理由,一些数据库跨越更多的物理数据库甚至引擎,并且在技术上可能不能创建跨越数据库的它不能在同一台服务器上的两个数据库上创建key。类似于前一个,一些应用程序被设计为数据库平台(DBMS)不可知的,并能够在Oracle,SQL Server,DB / 2或Sybase等各种数据库上工作。性能是数据仓库和商业智能的一切。但是,您不必创建保持数据一致性的结构,如主键,唯一键,外键或约束。数据库中缺少外键的另一个不太明显的负面影响是,不了解该模式的人很难找到正确的表并找出表关系。

m0_63592370的博客 2160

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

数据库主键与外键的区别

数据库主键与外键 我们知道,好的数据结构会影响速度,当然,好的数据库表设计会影响数据库操作效率。 特别是数据特别多的时候如果表的结构不好的话,操作将会变得特别复杂。其中,主键和外键值得我们去了解。 在开始了解主键和外键之前,你肯定了解一些RDBMS术语,我们来做一个简单回顾: ***RDBMS相关术语:*** 数据库:数据库是一些关联表的集合。 数据表: 表是数据的矩阵。在一个数...

weixin_44270855的博客 1万+

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

外键必须是另一个表的主键吗_我为什么不建议你使用数据库外键?

点击上方一个优秀的废人,选择“设为星标”优质文章,及时送达作者 | bang,Piotr Kononow链接 | www.jdon.com/49188Piotr Kononow是一位业务分析师、软件架构师和项目经理,他拥有15年以上编程经验和背景(SQL,java,C++…)。他的专长是数据仓库/ BI和商业应用,这是他的一篇文章:最近我和几位DBA和架构师争论,他们对一些数据库没有外键...

weixin_39970064的博客 1839

SQL--超键、候选键、主键、外键的认识和区分

前言: 对于刚学习数据库的童鞋来说,定会遇到这么一个问题,那就是数据库所说的各种键之间的关系以及区别,作为曾经在这个难点上有过痛苦经历的人来说,印象是比较深刻的,所以在这里我将我自己心中所了解到的四种键做一个小小的介绍,菜鸟级别的我希望大牛们多多指教指导,不胜感谢! 关系: 超键、候选键、主键和外键的关系: 请留意这句关于超键的定...

罗俊 7815

Mysql添加外键的方式

MySQL添加外键方法以及使用外键的一些注意

weixin_63725985的博客 2万+

创建主、外键约束(列级别和表级别)

创建主键约束 代码  在列属性中使用CONSTRAINT关键字 CREATE TABLE invoice  (     invoice_id NUMBER CONSTRAINT invoice_pk PRIMARY KEY,                                                  --自动编号,唯一,不为空      vendor_id NUMBE

zhran123的专栏 4194

数据库表设置外键VS不设置外键,哪个更好?

转发自极光轻学,原文链接:https://jiguangqingxue.com/info/24 必须设置外键VS不要设置外键的争论 数据库表到底要不要设置外键约束,一直具有非常大的争议。我认为完全没有必要非黑即白,存在即合理。 这两种争论的产生根源在于它们都有各自的使用场景和理由,并不是纯理论的空想。 所以最好的方式是根据项目类型、业务场景进行决策,甚至可以两种方式混合使用,才是最好的。 例如对于证券、股票、保险、银行等金融行业,应该设置外键保证数据的一致性更加重要,而对于互联网行行业的衣食住行则

尹洪亮 Kevin 2427

MySql数据库主键外键与数据库设计

MySql数据库主键外键与数据库设计

BGONE的博客 1万+

gorm数据库是否需要设置外键

gorm一对多官方文档设置外键的缺点 代码 model main 新增 日志: 查询 日志: 结果: 最后 官方文档看起来很容易误导,让开发以为一对多的关系就必须要存在外键,但是我们再真实的开发环境下,大多是不会用到数据库中的物理外键的,仅仅只是做一个逻辑关联就够了.官方文档这里说的必须存在外键是我们再model里面必须要指明外键,而不是数据库中一定要有这个外键, 注意: 这种情况我们就不能使用db.AutoMigrate() 来自动创建表了,因为我们再代码中指明外键,如果再使用 db.AutoMi

一个菜鸟的博客 3561

mysql的无外键设计_数据库设计可以不要外键的7个理由

我在大学时上数据库的课程,学的三个范式中有个第三范式就是专指的外键约束。可是出来工作以后第一次做数据库表设计的时候,组长大佬却让我在数据库中不要使用外键,改在代码中做相应处理。说得专业点,就是不要在数据库中使用物理外键,改为使用逻辑外键,即在代码中写相关的逻辑代替外键所起的作用。我从此便懂得了,解决实际的问题要从实际出发,不能照本宣科。外键的作用1.外键能保证数据的完整性。在没有外键的情况下,数据...

weixin_29463881的博客 1599

数据库不使用外键的 9 个理由

作者 | bang,Piotr Kononow 链接 | www.jdon.com/49188 来自公众号:好好学java 仅供个人学习研究使用,如有侵权,立马删除 Piotr Kononow是一位业务分析师、软件架构师和项目经理,他拥有15年以上编程经验和背景(SQL,java,C++…)。他的专长是数据仓库/ BI和商业应用,这是他的一篇文章: 最近我和几位DBA和架构师争论,他们对...

ido1ok的博客 344

mysql外键约束

mysql 外键的创建、添加及使用

qq_63776150的博客 5756
上一篇: 无法使用 javadoc 等命令?
下一篇: MySQL 中 localhost 与 127.0.0.1 不为人知的秘密
ali48
博客等级 码龄6年 31粉丝 117原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值