数据库设计的三大范式

数据库设计一定要遵循三大范式? 前几天再面试百度提前批的时候被问到这个问题,答的不够好,主要是我对这一部分的知识点掌握得不够深入,今天就总结一下关系型数据库的三大范式以及讨论一下数据库设计是否一定要遵循三大范式。特征:无重复列目的:消除实体中列中的重复值或实体的重复属性每一个属性都是原子项,不可分割。一范式(First Normal Form,1NF)是关系数据库设计中最基本的范式。它要求数据库表中的每个列都不可分割地保存一个原子值,即每个列都应该是单一值,不可再分解。 阅读详情

数据库范式的定义

在设计数据库的时候,为了设计出合理的关系型数据库,就需要遵循一些规范要求,这些规范要求被成为数据库范式。
目前,关系型数据库主要有六种范式:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、巴斯-科德范式(BCNF)、第四范式(4NF)和第五范式(5NF,又称完美范式)。一般来说,数据库满足前三个范式就可以了。

第一范式(1NF)

定义

所谓第一范式(1NF)是指在关系模型中,对域添加的一个规范要求,所有的域都应该是原子性的,即数据库表的每一列都是不可分割的原子数据项,而不能是集合,数组,记录等非原子数据项。即实体中的某个属性有多个值时,必须拆分为不同的属性。在符合第一范式(1NF)表中的每个域值只能是实体的一个属性或一个属性的一部分。简而言之,第一范式就是无重复的域。

解释

第一范式是指数据库表中的每个字段都是不可分解的,即数据库表中的字段具有原子性。
例如,我们有个学生信息表,如下:

idnameageaddress
001张三26山东省青岛市XX县XX镇XX村XX号
002李四25河南省开封市XX县XX区XX号

这个表就违反了第一范式,因为表中的字段 地址(address) 可以重新拆分为 省(address_province) 市(address_city) 详细地址(address_detail)。

idnameageaddress_provinceaddress_cityaddress_detail
001张三26山东省青岛市XX县XX镇XX村XX号
002李四25河南省开封市XX县XX区XX号

如上图所示的表遵循了第一范式,对学生的地址管理就方便了很多,也能提高数据库的性能。比如我们要查询青岛市的学生有谁的时候。

第二范式(2NF)

定义

第二范式(2NF)是在第一范式(1NF)的基础上建立起来的,即满足第二范式(2NF)必须先满足第一范式(1NF)。第二范式(2NF)要求数据库表中的每个实例或记录必须可以被唯一地区分。选取一个能区分每个实体的属性或属性组,作为实体的唯一标识。

解释

第二范式是指在第一范式的基础上,确保表中的每一列都依赖与主键,而不能只依赖与主键(联合主键)的一部分。
例如我们有个学生选课表如下:

学生ID(student_id)课程名称(course_name)学分(credit)成绩(score)
001计算机科学与技术1080
002计算机科学与技术1059
001软件工程1398
002软件工程1395

上表中,主键为 学生ID(student_id) 和 课程名称(course_name) 组成的联合主键,成绩(score) 完全依赖与这个联合主键,但 学分(credit) 只依赖于 课程名称(course_name) 。所以违反了第二范式,产生了字段 学分(credit) 的数据冗余。

学生ID(student_id)课程ID(course_id)成绩(score)
00100180
00200159
00100298
00200295
课程ID(course_id)课程名称(course_name)学分(credit)
001计算机科学与技术10
002软件工程13

如上所示,将 课程名称(course_name) 和 学分(credit) 拆分到单独的课程表中,在学生选课表中使用 学生ID(student_id) 和 课程ID(course_id) 构成联合主键,这样就遵循了第二范式,消除了字段冗余。

第三范式

定义

第三范式(3NF)是第二范式(2NF)的一个子集,即满足第三范式(3NF)必须满足第二范式(2NF)。简而言之,第三范式(3NF)要求一个关系中不包含已在其它关系已包含的非主关键字信息。

解释

第三范式其实就是要消除传递依赖,确保每个字段都与主键直接相关。
例如我们在第一个例子的学生信息表中添加几个字段,如下:

idnameageaddressclass班主任(class_head_teacher)
001张三26山东省青岛市XX县XX镇XX村XX号101班李老师
002李四25河南省开封市XX县XX区XX号102班王老师
003王五24河南省开封市XX县XX区XX号101班李老师

其中 班主任(class_head_teacher) 依赖于 class 字段,其余字段则依赖于 id 字段,出现了传递依赖,并且 班主任(class_head_teacher) 产生了冗余。

idnameageaddressclass_id
001张三26山东省青岛市XX县XX镇XX村XX号001
002李四25河南省开封市XX县XX区XX号002
003王五24河南省开封市XX县XX区XX号001
idclass_name班主任(class_head_teacher)
001101班李老师
002102班王老师

将班级相关的内容抽取成单独的班级表,学生表中值存放 class_id 做为管理。这样就符合了第三范式,消除了冗余。

WSL2安装(详细过程) 适用于 Linux 的 windows 子系统允许开发人员直接在 Windows 上运行 GNU/Linux 环境 -- 包括大多数命令行工具、实用程序和应用程序,无需修改,而无需传统虚拟机或dualbot设置的开销。 阅读详情

相关推荐

Cryptomatte For Nuke的安装

进入官网https://github.com/Psyop/Cryptomatte,下载文件代码。 将Cryptomatte/nuke里的文件内容复制粘贴到 .nuke文件夹内。 在我们复制粘贴的内容中可以看到两个文件。 同时,我们进入nuke的下载目录,打开plugins文件夹,看到和插件中一样python文件——init.py和menu.py。 我们将Cryptomatte里的init.py和menu.py里的python代码复制粘贴到Nuke/plugins下的init...

qq_41627587的博客 9061

数据库设计三范式简述

第一范式(1NF),原子性 原子性: 存储的数据应该具有“不可再分性”。 反例: 修改后 第二范式(2NF)唯一性 (消除非主键依赖联合主键中的部分字段) 需要实现每一行数据具有唯一可区分的特性,并不能有部分依赖关系。 通常,给一个表加主键(也是推荐做法),就可以做到“唯一可区分”。 但主键有这样情况: 设定一个字段为主键:此时,表示该一个字段的值就可以明确确定一行数据。 设定多个字段为主键:表示只有这多个字段的值都确定后才能确定一行数据。此时也称为“联合主键” 什么叫..

weixin_51369307的博客 1574

Oracle数据库安装及配置(Oracle19c)

Windows 10安装Oracle 19c教程

weixin_69200200的博客 2万+

详解数据库设计准则: 第一范式,第二范式,第三范式

为了建立冗余较小、结构合理的数据库,设计数据库时必须遵循一定的规则。在关系型数据库中这种规则就称为范式。范式是符合某一种设计要求的总结。要想设计一个结构合理的关系型数据库,必须满足一定的范式。                   在实际开发中最为常见的设计范式有三个: 1.第一范式(确保每列保持原子性) 第一范式是最基本的范式。如果数据库表中的所有字段值都是不可分解的原子值,就说明该数据...

weixin_39372979的博客 3258

多路输出电源的交叉调整率:从理论到无源优化实践

本文深入探讨了多路输出电源中的交叉调整率问题,分析了其物理根源及无源优化方法。通过漏感与耦合的理论分析,结合加权反馈、电感耦合等五种无源优化技术,帮助工程师有效解决交叉调整率挑战。文章还以TDK-Lambda CUT75系列为例,展示了优化技术的实际应用与效果。

weixin_26886855的博客 280

ESP-01S获取网络时间踩坑全记录:AT指令调试、JSON解析乱码、时区处理,一个都不能少

本文详细记录了使用ESP-01S WIFI模块获取网络时间的完整过程,包括AT指令调试、JSON解析乱码处理以及时区转换等关键步骤。通过实战案例和代码示例,帮助开发者避开常见陷阱,实现稳定的网络时间同步功能。

weixin_30460489的博客 295

数据库三大范式详解(通俗易懂)

范式,即数据库设计中的规范,是确保数据结构合理化的关键。它由关系数据库理论的先驱 E.F.Codd 在上世纪70年代提出,目前包括八种范式,但通常我们主要关注前三种:第一范式(1NF)、第二范式(2NF)和第三范式(3NF)。

qq_46735055的博客 3292

在微信小程序中如何引入iconfont

略

sayyy的专栏 4326

数据库三大范式(图文详解)

范式是数据库设计时遵循的一种规范,不同的规范要求遵循不同的范式。

爱吃鸡腿的明仔 1万+

若依框架二次开发——RuoYi-AI 本地部署流程

若依框架二次开发——RuoYi-AI 本地部署流程

bjzhang75的博客 1784

YOLO26涨点改进| TGRS 2026 | 独家创新首发、注意力改进篇| 引入LCGA局部曲率引导注意力,保持局部稳定性的同时突出关键几何区域,含多种创新改进,促进YOLO26所有任务高效涨点

🔥本文提出LCGA(局部曲率引导注意力)模块,通过引入曲率信息改进YOLO26网络模型。LCGA在局部窗口内利用深度卷积构造曲率代理,调制标准窗口注意力,使模型更关注道路、边界等曲线型结构,提升遥感图像超分辨率中的几何保真度。相比普通注意力,LCGA能精准聚焦关键几何区域,减少边缘断裂和轮廓偏移,同时保持较低计算开销。实验表明LCGA显著提升性能,在UCMerced数据集上PSNR提升0.2148dB。文章提供了三种改进方案。

Ai缝合怪、助力小伙伴高效发论文 227

数据库的三大范式

设计数据表的时候,要考虑很多的问题:如果数据库设计得不合理的话,可能导致下面的几种问题:我们可以看出设计良好的数据库是很重要的,它有下面的优点:设计数据库,我们得重视数据表的设计,为了建立冗余度小,结构合理的数据库,设计数据库必须遵循一定的规则。关系型数据库中,关于数据表设计的基本原则,规则就称为范式,范式是我们在设计数据库结构过程中需要遵循的规则和指导方法。 不过,有的时候为了提高某一些查询性能,我们还需要破坏范式规则,也就是反规范化。范式的定义会用到主键和候选键,我们先来看看相关的概念,数据库中的键是

梦想也许遥不可及,但重要的是追梦的过程,用博客记录自己的成长,记录自己一步一步向上攀登的印记 6万+

「企业级智能体」LangChain4j Multi-Agent:角色分离 + 协同编排实战

在大部分 Java 项目里,“接入大模型Controller 收到一个 question调用大模型接口拿到 answer把结果原样丢回前端这种玩法可以叫「高配搜索框模式一个 Agent 要写 Prompt、要查数据库、还要改写文案,太忙了不同角色(创作者、编辑、审稿人)的职责混在一起,难以维护想复用其中一段能力(比如只要润色)也不方便把大任务拆成多个 “角色清晰的 Agent”,再编排它们像流水线一样协同完成任务。CreativeWriter:负责创作故事。

OFFTime_we的博客 1547

《Database-数据库设计的三大范式》

数据库设计的三大范式: 1、第一范式(确保每列保持原子性) 第一范式是最基本的范式。如果数据库表中的所有字段值都是不可分解的原子值,就说明该数据库表满足了第一范式。 第一范式的合理遵循需要根据系统的实际需求来定。比如某些数据库系统中需要用到“地址”这个属性,本来直接将“地址”属性设计成一个数据库表的字段就行。但是如果系统经常会访问“地址”属性中的“城市”部分,那么就非要将“地址”这个属性重新拆分为省份、城市、详细地址等多个部分进行存储,这样在对地址中某一部分操作的时候将非常方便。这样设计才算满足了数据库的第

小霸王的博客 299

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

精雕软件(JDpaint) 5.5 绿色版

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

数据库设计三大范式

为了建立冗余较小、结构合理的数据库,设计数据库时必须遵循一定的规则。在关系型数据库中这种规则就称为范式。范式是符合某一种设计要求的总结。要想设计一个结构合理的关系型数据库,必须满足一定的范式。 在实际开发中最为常见的设计范式有三个: 1.第一范式(确保每列保持原子性) 第一范式是最基本的范式。如果数据库表中的所有字段值都是不可分解的原子值,就说明该数据库表满足了第一范式。 第一范式的合理遵循需要根...

一点一滴 4万+

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

超详细:数据库的三大范式与反范式设计

第一范式(1NF)要求关系型数据库中的每个列都必须是原子的,即每列的值不能再分解成其他几列。也就是说,数据库表的每一列都是不可分割的原子数据项,而不能是集合、数组、记录等非原子数据项。

上官花雨滴博客!!! 1628

【数据库三大范式】让我们来聊一聊数据库的三大范式和反范式设计

数据库三大范式是指数据库设计中的规范化原则,它们分别是第一范式(1NF)第二范式(2NF)和第三范式(3NF)。第一范式(1NF)第二范式(2NF)第三范式(3NF)

无法自律的人的博客 1606

数据库设计需遵守的三大范式

大家好,我是猿猴小冷,今天给大家分享一下数据库设计需遵守的三大范式 文章目录一、三大范式是什么?二、三大范式1. 第一范式:要求数据库表的每一列都是不可分割的原子数据项2. 第二范式:要求一个表中只能存储一种数据,需要确保数据库表中的每一列都和主键相关3. 第三范式:需要确保数据表中的每一列数据都和主键直接相关,而不能间接相关。三、数据库的事务性1. 事务处理2. 事务ACID属性 一、三大范式是什么? 第一范式:当关系模式R的所有属性都不能在分解为更基本的数据单位时,称R是满足第一范式的,简记为1NF。

xiaoxinshijie的博客 4711

关系型数据库设计三大范式总结

数据库设计三大范式 为了建立冗余较小、结构合理的数据库,设计数据库时必须遵循一定的规则。在关系型数据库中这种规则就称为范式。范式是符合某一种设计要求的总结。要想设计一个结构合理的关系型数据库,必须满足一定的范式。 在实际开发中最为常见的设计范式有三个: 1.第一范式(确保每列保持原子性) 第一范式是最基本的范式。如果数据库表中的所有字段值都是不可分解的原子值,就说明该数据库表满足了第一范式。 第一...

黄亚的博客 3520

数据库表设计三大范式

但要注意,过多的索引会增加写操作的成本,并占用额外的存储空间,因此需要根据实际需求权衡选择。8. 定期维护和优化:数据库结构的设计并不是一次性的工作,随着业务需求的变化和数据量的增长,可能需要对数据库结构进行调整和优化。- 例如,如果一个"员工"表中的"部门电话"字段依赖于"部门名称",而"部门名称"又依赖于"部门编号",那么存在传递依赖,不符合第三范式。- 在第二范式中,数据库表必须符合第一范式,并且表中的每一列都必须完全依赖于表的候选键(唯一标识表中每一行数据的字段,通常是主键)。

m0_66572126的博客 1496

数据库设计三大范式和五大约束

数据库设计三大范式和五大约束 一、三大范式: 什么是范式:简言之就是,数据库设计对数据的存储性能,还有开发人员对数据的操作都有莫大的关系。所以建立科学的,规范的的数据库是需要满足一些规范的来优化数据数据存储方式。在关系型数据库中这些规范就可以称为范式。范式是关系数据库理论的基础,也是我们在设计数据库结构过程中所要遵循的规则和指导方法,以下就是对这三个范式的基本介绍: 第一范式(1NF): 1、数据表中的每一列(字段),必须是不可拆分的最小单元,也就是确保每一列的原子性。满足第一范式是关系模式规范化的

cyh9001的博客 374
上一篇: 最短路径(弗洛伊德算法)
下一篇: Spring Cloud 保证微服务内安全
sunbufu
博客等级 码龄11年 17粉丝 36原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值