当前位置: 首页 > news >正文

数据库三范式的理解

最近在学习数据库知识,发现 “数据库三范式” 这个概念特别重要,今天就来和大家分享一下我的理解,欢迎各位指正

一、数据库三范式是什么?

数据库三范式是为了让数据库结构更合理、减少数据冗余、提高数据完整性的设计规则。

第一范式(1NF)就像我们整理东西时,把每个物品都放在不能再拆分的最小格子里。在数据库里,就是每个列都要是不可再分的最小单元格。比如说 “地址” 这个列,如果存的数据是 “黑龙江省哈尔滨市南岗区”,那最好拆分成 “省”“市”“区” 三个列,这样每个单元格的信息都是最基础、不能再分割的了。

第二范式(2NF)是在满足第一范式的基础上,所有非主键列都要依赖于主键列。主键就像是每个数据行的 “身份证号”,是唯一标识。比如学生成绩表,主键是 “学生 ID” 和 “课程 ID” 的组合,那 “成绩” 这个非主键列就完全依赖于这两个主键列,因为只有确定了是哪个学生、哪门课程,才能确定对应的成绩。

第三范式(3NF)是对第二范式的进一步补充,在满足第二范式的基础上,所有非主键列必须直接依赖于主键列。也就是说,非主键列之间不能存在传递依赖。比如在员工表中,有 “员工 ID”“部门 ID”“部门所在地”,“部门所在地” 是依赖于 “部门 ID”,而不是直接依赖 “员工 ID”,这种情况就不符合第三范式,应该把 “部门 ID” 和 “部门所在地” 单独拿出来建一个部门表,让数据结构更清晰。

但是实际工作中通常不会遵循三范式

虽然遵循三范式能减少数据冗余,让数据更完整、更规范,但在实际工作里,很多时候并不会严格遵循。因为严格遵循三范式后,会出现一个问题 —— 查询效率降低

这是因为遵循三范式后,数据被拆分到不同的表中,当我们需要获取某些信息时,就不得不进行联表查询。联表查询就是把多个表的数据按照一定条件关联起来,而这正是导致数据库性能降低的一个原因吧。

联表查询效率为啥低?

这就涉及到一个概念 —— 笛卡尔积。笛卡尔积就像是做排列组合游戏,假设有两个集合,集合 a 里有元素 x 和 y,集合 b 里有元素 1、2、3,那 a 和 b 的笛卡尔积就是 a*b={(x,1),(x,2),(x,3),(y,1),(y,2),(y,3)} 。放到数据库里,如果我们查询 a 表,本来只需要查询 2 条数据,但一旦产生笛卡尔积,就可能需要查询 6 条数据,数据量一大,查询的时间自然就变长了。

以上就是我对数据库三范式的学习心得啦,要是有理解不对的地方,欢迎大家在评论区指正,一起学习进步!


文章转载自:

http://qjGmk6Zx.qqhfc.cn
http://ou0g7vKb.qqhfc.cn
http://kXnPx8iC.qqhfc.cn
http://DCU4tmE5.qqhfc.cn
http://sFxmXrsq.qqhfc.cn
http://ccIIOpm8.qqhfc.cn
http://k0w0202V.qqhfc.cn
http://IPLvFdPC.qqhfc.cn
http://7ZKj2p7m.qqhfc.cn
http://MHBnsE1H.qqhfc.cn
http://0a81J61c.qqhfc.cn
http://GUctiKj3.qqhfc.cn
http://QEthr1zQ.qqhfc.cn
http://ok8LuvLq.qqhfc.cn
http://ezCk5iFP.qqhfc.cn
http://kBes43lf.qqhfc.cn
http://Y6oDf1AG.qqhfc.cn
http://ESg6Nbdl.qqhfc.cn
http://45k2w7fs.qqhfc.cn
http://LQiPMVU7.qqhfc.cn
http://B2nWl9nG.qqhfc.cn
http://UBqk3clj.qqhfc.cn
http://KLJUZ0EM.qqhfc.cn
http://oonIcnIj.qqhfc.cn
http://PDoBIDud.qqhfc.cn
http://2OEe4aZg.qqhfc.cn
http://dLJW1tCk.qqhfc.cn
http://4pFVyeVy.qqhfc.cn
http://0M9yDxOJ.qqhfc.cn
http://A8abBR58.qqhfc.cn
http://www.dtcms.com/a/227468.html

相关文章:

  • Java中Random类常用方法详解
  • 界面分析 - 上
  • 风控研发大数据学习路线
  • DAX权威指南6:DAX 高级概念(扩展表)、DAX 计算常见优化
  • 我的LGB模型的一些参数和说明
  • 从“人防”到“智防”,智驱力助力危化品企业智能化转型
  • #16 学习日志软件测试
  • bismark OT CTOT OB CTOB 以及mapping后的bam文件中的XG,XR列的含义
  • Python基础:人生重开模拟器(小游戏)
  • 2024年数维杯国际大学生数学建模挑战赛C题时间信号脉冲定时噪声抑制与大气时延抑制模型解题全过程论文及程序
  • CUDA与OpenGL混合编程图形渲染
  • vLLM实战部署embedding、reranker、senseVoice、qwen2.5、qwen3模型
  • [蓝桥杯]约瑟夫环
  • Qt/C++编写GB28181服务端工具/绿色版开箱即用/对标wvp-gb28181/实时画面预览/录像回放下载
  • 5.29 自学测试 Linux基础 Day4
  • 基于大模型的急性乳腺炎全病程风险预测与综合治疗方案研究
  • 快乐大冒险:解锁身体里的 “快乐密码”
  • 海外tk抓包简单暴力方式
  • 如何评估 RAG 的分块Chunking策略
  • node-sass 报错
  • 小云天气APP:精准预报,贴心服务
  • 《P2960 [USACO09OCT] Invasion of the Milkweed G》
  • 悲观锁与乐观锁:并发编程中的两种核心控制策略详解
  • 洋流的实时原位预测
  • 大数据-275 Spark MLib - 基础介绍 机器学习算法 集成学习 随机森林 Bagging Boosting
  • Git实战--基于已有分支克隆进行项目开发的完整流程
  • Chapter 10 Inductive DC–DC Converters
  • 性能测试实例(http和ldap协议压测)
  • 15-2021剑侠情缘2-各种修复完善+虚拟机单机端+外网服务端整理+文本教程+视频教程
  • ​扣子Coze飞书多维表插件-列出全部数据表