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

数据库三大范式:从概念到实战,一篇文章彻底搞懂

为什么你的表设计总出问题为什么数据冗余、更新异常、插入异常、删除异常频频发生很可能是范式没用好。今天我们用最通俗的语言把这三大范式讲清楚、讲透彻。数据库设计是一门艺术而范式就是这门艺术的“基本法”。掌握三大范式不仅能让你设计出结构清晰、冗余低、易维护的数据库还能帮你理解很多高级设计思想。今天我们就来一场范式之旅。一、范式是什么为什么需要它范式Normal Form是关系型数据库中用于规范化表结构的一套理论准则目的是减少数据冗余、避免更新异常、插入异常和删除异常。异常现象举例一个设计糟糕的表学号姓名系名系主任课程号课程名成绩101张三计算机系王教授C001数据库85101张三计算机系王教授C002操作系统90102李四数学系李教授C001数据库78问题数据冗余张三的系名和系主任重复存储。更新异常如果计算机系主任换成张教授需要更新多行容易遗漏。插入异常一个新系还没招学生就无法插入系主任信息因为主键需要学号课程号。删除异常如果张三退选所有课程他的系信息也会被删除。范式的目标就是通过分解表来消除这些问题。二、第一范式1NF原子性列不可再分2.1 定义第一范式要求表中的每一列都是不可再分的基本数据项即每个属性值都是原子的。2.2 违反 1NF 的例子学号姓名联系方式101张三电话: 138****, 邮箱: zhangsanxx.com“联系方式”列包含了电话和邮箱两个信息不满足原子性。应该拆分为两列学号姓名电话邮箱2.3 常见误区复合属性如地址拆分为省、市、街道需要根据业务需求决定是否拆分不一定必须拆但拆了更符合 1NF。1NF 只要求列不可分不要求消除重复组那是更高范式的事。实际上任何一张符合关系数据库定义的表默认都满足 1NF因为关系模型要求属性是原子的。所以我们通常从 2NF 开始讨论。三、第二范式2NF消除部分依赖3.1 前置知识完全函数依赖 vs 部分函数依赖完全函数依赖主键的所有列一起才能决定某个非主属性。部分函数依赖主键中的一部分列就能决定某个非主属性。例子表(学号, 课程号) - 成绩是联合主键。成绩依赖于完整的学号课程号这是完全依赖。但如果还有“学生姓名”列姓名只依赖于学号不依赖于课程号这就是部分依赖。3.2 第二范式定义第二范式在满足 1NF 的基础上消除非主属性对主键的部分依赖。3.3 违反 2NF 的例子选课表学号课程号学生姓名系名成绩101C001张三计算机85101C002张三计算机90主键是学号课程号。非主属性“学生姓名”只依赖于学号不依赖于课程号 → 部分依赖。同样“系名”也只依赖于学号。问题数据冗余每个课程都重复存储姓名和系名更新异常修改姓名需要改多行。3.4 分解达到 2NF将表拆分为两张学生表(学号, 学生姓名, 系名)主键学号。选课表(学号, 课程号, 成绩)主键学号课程号。这样学生信息只存储一次消除冗余。四、第三范式3NF消除传递依赖4.1 传递依赖定义如果非主属性 B 依赖于主键 A而另一个非主属性 C 又依赖于 B则 C传递依赖于 A。4.2 第三范式定义第三范式在满足 2NF 的基础上消除非主属性对主键的传递依赖。4.3 违反 3NF 的例子学生表已经满足 2NF学号学生姓名系号系名系主任101张三D01计算机系王教授102李四D01计算机系王教授103王五D02数学系李教授主键是学号。非主属性“系名”和“系主任”依赖于“系号”而“系号”又依赖于“学号”学号 → 系号 → 系名。这就是传递依赖。问题冗余计算机系的系名和主任重复存储更新异常修改系主任需要更新多条记录。4.4 分解达到 3NF再拆分为两张表学生表(学号, 学生姓名, 系号)系号作为外键。系表(系号, 系名, 系主任)。这样系信息只存储一次消除传递依赖。五、三大范式总结表范式核心要求消除的依赖目标1NF列不可分原子性—确保每一列都是基本数据项2NF消除部分依赖非主属性对主键的部分依赖确保每个非主属性完全依赖于整个主键3NF消除传递依赖非主属性之间的传递依赖确保非主属性之间相互独立只依赖于主键记忆口诀1NF列不可分2NF全依赖主键3NF不依赖其他非主键六、范式不是越高越好反范式化6.1 范式的代价表拆分越多查询时需要的JOIN 操作就越多性能可能下降。在某些读远多于写的场景如数据仓库、报表系统适度的反范式化故意保留冗余可以大幅提升查询效率。6.2 反范式化应用举例电商订单场景遵循 3NF订单表只存用户 ID查询订单详情需要 JOIN 用户表获取用户名、地址。反范式订单表直接冗余存储“用户姓名”、“收货地址”快照。虽然更新用户信息时需要同步或容忍不一致但查询订单历史时无需 JOIN速度更快。6.3 设计原则核心原则以业务需求为导向在范式与性能之间取得平衡。通常OLTP在线事务处理系统建议遵循 3NFOLAP在线分析处理系统可以适当反范式化。七、扩展BCNF、第四范式、第五范式三大范式已经能满足绝大多数设计需求。简要提及更高级的范式BCNF巴斯-科德范式在 3NF 基础上消除主属性对候选键的部分/传递依赖处理多个候选键的情况。实际中很少遇到违反 BCNF 但仍满足 3NF 的表。第四范式4NF消除多值依赖。第五范式5NF消除连接依赖。在实际工程中达到 3NF 通常已经足够。八、实战设计示例从非规范化到 3NF假设要设计一个简单的“学生选课系统”。初始宽表未规范化学号学生姓名系名系主任课程号课程名成绩第一步确保 1NF其实这张表已经原子性没问题。第二步达到 2NF。找出部分依赖学生姓名、系名、系主任只依赖学号不依赖课程号。拆分为学生(学号, 姓名, 系名, 系主任)选课(学号, 课程号, 课程名, 成绩)第三步达到 3NF。学生表中系名和系主任传递依赖于学号学号→系名? 不应该是学号→系号→系名。但这里没有系号直接依赖实际上“系名”和“系主任”是关联的如果系名改变系主任也可能改变。它们依赖于隐含的“系号”。因此再拆分学生(学号, 姓名, 系号)系(系号, 系名, 系主任)选课(学号, 课程号, 成绩)课程(课程号, 课程名)最终得到 3NF 设计。九、常见面试题及答案Q1满足 3NF 的表一定满足 2NF 吗A是的3NF 是在 2NF 基础上的加强。Q2主键只有一个列的表最低满足第几范式A如果主键是单列则不可能存在部分依赖所以至少满足 2NF。至于是否满足 3NF要看有无传递依赖。Q3什么是候选键、主键、外键A候选键是能唯一标识一行的最小属性集合主键是选中的一个候选键外键是引用其他表主键的列。Q4实际项目中是否必须严格遵循 3NFA不一定。要根据读写比例、查询复杂度综合权衡。通常建议以 3NF 为起点在性能瓶颈处适度反范式化。十、总结三大范式是数据库设计的基石1NF列不可分这是底线。2NF消除部分依赖让所有字段完全依赖主键。3NF消除传递依赖让字段只依赖主键。它们帮助我们构建结构清晰、冗余可控、维护简单的数据库。但范式不是教条灵活运用、结合实际业务才是高手之道。如果觉得有帮助欢迎点赞、收藏、转发本文首发于 CSDN未经授权禁止转载。

相关文章:

数据库三大范式:从概念到实战,一篇文章彻底搞懂

为什么你的表设计总出问题?为什么数据冗余、更新异常、插入异常、删除异常频频发生?很可能是范式没用好。今天我们用最通俗的语言,把这三大范式讲清楚、讲透彻。数据库设计是一门艺术,而范式就是这门艺术的“基本法”。掌握三大范…...

基于安卓的农村劳动力信息匹配系统毕设

博主介绍:✌ 专注于Java,python,✌关注✌私信我✌具体的问题,我会尽力帮助你。一、研究目的本研究旨在设计并实现一种基于安卓平台的农村劳动力信息匹配系统以解决当前农村劳动力市场中存在的信息不对称与供需错配问题。随着我国城镇化进程的持续推进以及…...

Flux2-Klein-9B-True-V2多场景落地:政府宣传海报/公益广告图生成实践

Flux2-Klein-9B-True-V2多场景落地:政府宣传海报/公益广告图生成实践 1. 项目概述 Flux2-Klein-9B-True-V2是基于官方FLUX.2 [klein] 9B改进的文生图/图生图模型,专为高质量图像生成与编辑任务优化。该模型在保持原始模型强大生成能力的基础上&#xf…...

灵机一物AI原生电商小程序、PC端(已上线)-从 Vibe Coding 到 Wish Coding:AI 编程范式跃迁与蚂蚁灵光技术解读

摘要本文对比 Vibe Coding 与 Wish Coding 技术路径,解析蚂蚁灵光闪应用升级要点、灵光圈协作机制,探讨 Coding Agent 从开发者工具走向全民消费级产品的行业趋势。1. Vibe Coding 定位与边界1.1 核心逻辑- 面向:专业开发者- 入口&#xff1a…...

Phi-3.5-mini-instruct入门必看:网页封装+参数详解+中文场景调优指南

Phi-3.5-mini-instruct入门必看:网页封装参数详解中文场景调优指南 1. 模型简介 Phi-3.5-mini-instruct是一款专为中文场景优化的轻量级文本生成模型,特别适合日常问答、内容创作和知识辅助等任务。相比大型语言模型,它在保持良好生成质量的…...

XSKY 与平凯星辰(TiDB)完成联合解决方案互认证,存储+数据库联合交付能力再获验证

近日,XSKY 星辰天合与平凯星辰(北京)科技有限公司正式完成联合解决方案互认证。本次认证覆盖 XSKY 旗下 XEBS V6(星飞极速版)、XHERE V6(星飞极速版)、XEDP V6 三款核心产品与平凯星辰的平凯数据…...

告别变量地狱:手把手教你用Simulink结构体管理复杂模型参数(附实战案例)

告别变量地狱:手把手教你用Simulink结构体管理复杂模型参数(附实战案例) 打开一个大型Simulink模型时,你是否曾被工作区里密密麻麻的变量列表吓到?Gain_A、Offset_B、Init_C...这些看似有规律的命名,随着模…...

【Docker 27跨架构镜像转换终极指南】:20年DevOps专家亲授arm64/x86双平台无缝构建与推送实战

第一章:Docker 27跨架构镜像转换的核心演进与定位Docker 27 引入了原生集成的 docker buildx bake 与增强版 buildkit 调度器,将跨架构镜像构建从“多阶段手动交叉编译”推进至“声明式统一构建流水线”。其核心演进体现在三方面:构建上下文感…...

二维DFT图像频域分析:从基础原理到实战应用

前言 一维DFT我们已经玩明白了,知道它能把复杂信号拆成一堆正弦波。那二维DFT呢?简单说,就是把这个“拆解魔法”搬到了图像上。一张图片,其实也可以看作是二维信号,二维DFT就能把它拆解成无数个不同方向、不同频率的二…...

2026口碑靠前的备考增强记忆品牌榜单

这份口碑靠前的备考增强记忆品牌榜单是结合成分合规性、市场口碑、权威认证、场景适配性多个维度整理得出,能给备考人群选择脑营养补充产品提供清晰可靠的参考方向。这份口碑靠前的备考增强记忆品牌榜单的评选维度是什么?本次评选围绕三个核心指标筛选&a…...

【仅限持牌机构内部流通】:Docker 27金融隔离黄金配置矩阵(含Kubernetes 1.30+PodSecurity Admission适配表、FIPS 140-3认证路径)

第一章:Docker 27金融交易数据容器隔离概览在高并发、低延迟的金融交易系统中,数据隔离不仅是安全合规的核心要求,更是防止跨业务线干扰、保障交易一致性与审计可追溯性的基础设施能力。Docker 27(即 Docker Engine v27.x&#xf…...

谷歌Next年度大会智能体登场,OpenAI/微美全息构筑“AI芯片+智能体”生态受瞩目

北京时间周四,美国云服务巨头谷歌(GOOG.US)举行2026 Next大会,发布了旨在推动企业工作流程全面转向智能体的“代理式企业”(Agentic Enterprise)技术栈,涵盖第八代TPU、智能体软件平台等一系列前…...

Hive 技术文章大纲

Hive 技术文章大纲1. Hive 简介Hive 的定义及其在大数据生态系统中的角色Hive 与关系型数据库的区别Hive 的主要特点(如 SQL 兼容性、扩展性、批处理能力)2. Hive 架构与核心组件Hive 的整体架构(Metastore、Driver、Compiler、Executor 等&a…...

打破次元壁:在华为Pura X Max上体验华为阅读独家AI动态漫画力量!

作为一名长期混迹数码圈的科技博主,我本以为屏幕折叠、刷新率卷到头后,手机的阅读体验很难再有质的飞跃。但4月20日发布的华为Pura X Max,配合新升级的华为阅读最新独家技术,确实给了我一点小小的“鸿蒙震撼”。大家平时看漫画&am…...

别再手动配环境了!用CMake+VS2022一键搞定PCL点云库(附完整项目模板)

现代C点云开发实战:基于CMake与VS2022的PCL高效配置指南 点云处理已成为计算机视觉、自动驾驶和三维重建领域的核心技术之一。对于C开发者而言,Point Cloud Library (PCL)提供了强大的工具集,但传统的配置方式往往令人望而生畏——手动设置包…...

广州海珠智能体案例中的“咨询+干预+随访”多智能体协作:医疗AI从“单点工具”到“执行系统”的范式转移

引言:从“工具”到“系统”的范式转移在过去的几年中,人工智能在医疗领域的应用取得了显著进展。从辅助医生识别肺结节的影像系统,到自动生成电子病历的自然语言处理工具,AI技术正逐步渗透到诊疗的各个环节。然而,这些…...

千问3.5-9B在C语言教学中的应用:代码分析与调试助手

千问3.5-9B在C语言教学中的应用:代码分析与调试助手 1. 引言:编程教学的新帮手 "老师,我这个程序为什么运行不了?"——这句话可能是每个C语言课程助教最常听到的提问。传统编程教学中,教师需要面对大量基础…...

3分钟解决C盘爆红问题:WindowsCleaner终极清理指南

3分钟解决C盘爆红问题:WindowsCleaner终极清理指南 【免费下载链接】WindowsCleaner Windows Cleaner——专治C盘爆红及各种不服! 项目地址: https://gitcode.com/gh_mirrors/wi/WindowsCleaner 还在为Windows系统越用越慢而烦恼吗?当…...

Phi-3.5-mini-instruct开源可部署指南:自主可控的轻量级AI代码助手

Phi-3.5-mini-instruct开源可部署指南:自主可控的轻量级AI代码助手 1. 项目介绍 Phi-3.5-mini-instruct是微软推出的轻量级开源指令微调大模型,在代码理解和多语言任务上表现优异。这个模型特别适合作为本地AI代码助手使用,能够在单张RTX 4…...

智慧树自动刷课插件终极指南:3分钟解放双手,高效完成在线课程

智慧树自动刷课插件终极指南:3分钟解放双手,高效完成在线课程 【免费下载链接】zhihuishu 智慧树刷课插件,自动播放下一集、1.5倍速度、无声 项目地址: https://gitcode.com/gh_mirrors/zh/zhihuishu 还在为智慧树平台的繁琐视频播放流…...

Qwen3.5-9B-GGUF实战教程:llama-cpp-python参数调优全解析

Qwen3.5-9B-GGUF实战教程:llama-cpp-python参数调优全解析 1. 模型与项目概述 Qwen3.5-9B-GGUF是阿里云通义千问3.5系列中的90亿参数稠密模型,经过GGUF格式量化后,可以在消费级硬件上高效运行。该模型采用创新的Gated Delta Networks架构和…...

Java 面试:从微服务到数据库的幽默探讨

Java 面试:从微服务到数据库的幽默探讨 在这篇文章中,我们将通过一个幽默而又严肃的面试场景来探讨 Java 求职者在互联网大厂面试中可能遇到的技术问题。面试官将提出与微服务、数据库、测试框架等相关的问题,而搞笑的水货程序员燕双非则在回…...

UHMWPE板有哪些厂家

在众多的土工材料中,UHMWPE板(超高分子量聚乙烯板)凭借其优异的耐磨性、耐冲击性和自润滑性等特点,广泛应用于防弹服、合成溜冰场、各种耐磨机械零件及食品机械等领域。今天,山东龙翔新材料有限公司就为大家带来一份UH…...

Weka集成学习实战:Boosting、Bagging与Stacking对比

1. 使用Weka进行集成学习实验的完整指南作为一名长期使用Weka进行机器学习研究和教学的从业者,我发现集成学习方法在实际项目中能显著提升模型性能。本文将带你一步步在Weka Experimenter中设计并运行一个完整的集成学习实验,比较Boosting、Bagging和Ble…...

macOS虚拟机解锁神器:让VMware ESXi也能运行苹果系统

macOS虚拟机解锁神器:让VMware ESXi也能运行苹果系统 【免费下载链接】esxi-unlocker VMware ESXi macOS 项目地址: https://gitcode.com/gh_mirrors/es/esxi-unlocker 你是否曾经想过在VMware ESXi虚拟化平台上运行macOS系统?对于开发者和IT管理…...

不同水质检测标准不同

一、生活饮用水检测标准(核心常用)执行标准:《生活饮用水卫生标准》(GB 5749-2022),配套检验方法为《生活饮用水标准检验方法》(GB/T 5750-2023),自2023年4月1日起实施&a…...

DeepPCB:如何用1500对工业级图像彻底解决PCB缺陷检测难题?

DeepPCB:如何用1500对工业级图像彻底解决PCB缺陷检测难题? 【免费下载链接】DeepPCB A PCB defect dataset. 项目地址: https://gitcode.com/gh_mirrors/de/DeepPCB 还在为PCB缺陷检测项目找不到高质量训练数据而烦恼吗?还在担心你的深…...

VNC如何同步粘贴复制

1、右击控制的桌面图标2、点击 Properties,找到 Expert3、在 Filter 里搜索 clipboard下面三个改成图示就可以了4、jetson端开启 clipboard bridge在 Jetson 终端运行:sudo apt update sudo apt install autocutsel然后运行:autocutsel -fork…...

2026 GEO优化必备,AI搜索监测工具推荐

随着生成式AI技术的快速发展,AI搜索正在成为用户获取信息的主要渠道。GEO(生成式引擎优化)作为一种全新的营销方式,正在受到越来越多企业的重视。近日,有行业机构发布了2026年GEO工具市场报告,对全球范围内…...

2026AI搜索优化必看:这几款GEO监测工具亲测有效

背景随着生成式AI的普及,AI搜索正在成为用户获取信息的主要渠道之一。传统的SEO已经无法满足品牌在AI时代的曝光需求。AI搜索优化(GEO,Generative Engine Optimization)应运而生。从2026年1月到4月,我们团队对市面上主…...