数据库三大范式

漏洞挖
• 阅读 69

数据库三大范式

在数据库设计中,范式是一种规范化的设计方法,它可以帮助我们避免数据冗余和不一致性。目前,数据库中比较常用的范式有三种,分别是第一范式(1NF)、第二范式(2NF)和第三范式(3NF)。本文将介绍这三种范式,并举例说明。

1. 第一范式(1NF)

第一范式是最基本的范式,它要求关系中的每个属性都是原子性的,即不可再分。换句话说,每个属性都应该是一个单一的值,而不是多个值的组合。例如,一个学生表中的“姓名”属性应该是单一的值,而不是由姓和名组成的值。

2. 第二范式(2NF)

第二范式是在第一范式的基础上进一步规范化的范式。它要求关系表中的每个非主键属性都完全依赖于主键,而不是依赖于主键的一部分。例如,一个订单表中的“订单金额”属性应该依赖于订单号,而不是依赖于订单中的某个商品。

3. 第三范式(3NF)

第三范式是在第二范式的基础上进一步规范化的范式。它要求关系表中的每个非主键属性都不依赖于其他非主键属性。换句话说,每个非主键属性都应该直接依赖于主键。例如,一个学生表中的“年龄”属性应该直接依赖于学生的学号,而不是依赖于学生所在的班级。

区别

第二范式:2NF 设R为任一给定关系,若R为 1NF,且其所有非主属性都 完全函数依赖 于候选关键字,则R为 第二范式。

第一范式到第二范式的 过程:消除第一范式的 部分函数依赖 的过程。

第三范式:3NF 设R为任一给定关系,若R为 2NF,且其每一个非主属性都 不传递函数依赖 于候选关键字,则R为 第三范式。

第二范式到第三范式的 过程:消除第二范式的 传递函数依赖 的过程。

举例说明

假设有一个订单表,包含以下属性:订单号、客户号、客户姓名、商品号、商品名称、商品数量、商品单价、订单金额。该表的主键是订单号和商品号。

如果按照第一范式来设计该表,每个属性都应该是原子性的,即不可再分。因此,我们需要将客户姓名、商品名称和商品单价这些属性分别拆分成单独的属性。

如果按照第二范式来设计该表,我们需要保证每个非主键属性都完全依赖于主键。因此,我们需要将订单金额和商品数量属性从订单表中移除,并创建一个新的表来存储订单金额,该表的主键为订单号和商品号。

如果按照第三范式来设计该表,我们需要保证每个非主键属性都不依赖于其他非主键属性。因此,我们需要将客户姓名、商品名称和商品单价这些属性从订单表中移除,并创建新的表来存储这些属性。

数据库三大范式

点赞
收藏
评论区
推荐文章
关系型数据库设计三大范式
作者:郑龙飞范式定义百度百科:设计关系数据库时,遵从不同的规范要求,设计出合理的关系型数据库,这些不同的规范要求被称为不同的范式,各种范式呈递次规范,越高的范式数据库冗余越小。人类语言:范式可以理解为设计一张数据表的表结构,符合的标准级别、规范和要求。而通
zdd小小菜鸟 zdd小小菜鸟
2年前
MySQL面试
MySQL面试1.数据库的三范式是什么?tex第一范式:强调的是列的原子性,即数据库表的每一列都是不可分割的原子数据项。第二范式:要求实体的属性完全依赖于主关键字。所谓完全依赖是指不能存在仅依赖主关键字一部分的属性。
Souleigh ✨ Souleigh ✨
4年前
10分钟学会python函数式编程
在这篇文章里,你将学会什么是函数范式以及如何使用Python进行函数式编程。你也将了解列表推导和其它形式的推导。函数范式在命令式范式中,通过为计算机提供一系列指令然后执行它们来完成任务。在执行这些指令时,可以改变某些状态。例如,假设你最初将A设置为5,然后更改A的值。这时在变量内部值的意义上,你改变了A的状态。在函数式范式中,你不用告诉计算机做什
lix_uan lix_uan
3年前
MySQL学习总结
数据库的三大范式第一范式:每个列都不可以再拆分第二范式:在第一范式的基础上,非主键列完全依赖于主键第三范式:在第二范式上,非主键列只依赖主键,不依赖其他非主键事务的并发问题脏读:事务A读取了事务B更新的数据,然后数据B回滚,那么A读到的是脏数据不可重复读:事务A多次读取同一数据,事务B在事务A读取的过程中对数据进行了修改并提交,导致A多次读的数据
Wesley13 Wesley13
3年前
MongoDB开发系列
本篇文章主要介绍数据集设计中的分桶范式以及使用实例。数据集设计模式,MongoDB在官方文档https://docs.mongodb.com/ecosystem/ 中的usecases部分提供了详细的参考内容。结合文档,本篇说一些比较深入的MongoDB使用分桶模式分桶模式是MongoDB数据集设计的一种范式。分桶buckets
Wesley13 Wesley13
3年前
MySQL5.7 基础之二
设计范式:  第一范式:字段是原子性  第二范式:存在可用主键  第三范式:任何表都不应该有依赖于其它表非主键的字段创建数据库、设计数据表  字段:字段名、数据类型、约束(通过键来实现,而键其实可以当做索引来用)DDL:CREATE、DROP、ALTERDML:INSERT(REPLACE)、DELETE、UPDATE、SELE
Wesley13 Wesley13
3年前
MySQL数据库开发的三十六条军规
一.核心军规尽量不在数据库做运算,cpu计算的事务必移至业务层;  控制表、行、列数量(【控制单张表的数据量1年/500W条,超出可做分表】,【单库表数据量不超过300张】、【单张表的字段个数不超过50个,多了拆表】)三大范式没有绝对的要使用,效率优先时可适当牺牲范式 https://www.cnblogs.com/wdw31
Wesley13 Wesley13
3年前
MySQL面试
范式1:原子性,表中的没一列都是不可分的,不能是数组,集合。范式2:在第一范式基础上,属性完全依赖于主键。范式3:非主属性不依赖于其它非主属性。(关系中不包含在其它关系中已包含的非主键信息)   比如Student表(学号,姓名,年龄,性别,所在院校,院校地址,院校电话)   这样一个表结构,就存在上述关系。 学号 所在院校
Wesley13 Wesley13
3年前
MySQL相关
一、数据库的三种范式第一范式:数据库表的每一列都是不可分割的基本数据项。第二范式:数据库表中的每个实例或行必须可以被惟一地区分,即主键。第三范式:要求数据库表中不包含已在其它表中已包含的非主关键字信息,即外键。二、存储过程存储过程是一个可编程的函数,它在数据库中创建并保存。优点有:1、存储过程能
Wesley13 Wesley13
3年前
Java相关面试题总结+答案(九)
【MySQL】164\.数据库的三范式是什么?第一范式:强调的是列的原子性,即数据库表的每一列都是不可分割的原子数据项。第二范式:属性完全依赖于主键(满足第一范式的前提下),即任意一个字段只依赖于表中的同一个字段。第三范式:任何非主属性不依赖于其它非主属性(满足第二范式的前提下)。即不存在传
京东云开发者 京东云开发者
7个月前
关系型数据库设计三大范式
作者:京东科技郑龙飞范式定义百度百科:设计关系数据库时,遵从不同的规范要求,设计出合理的关系型数据库,这些不同的规范要求被称为不同的范式,各种范式呈递次规范,越高的范式数据库冗余越小。人类语言:范式可以理解为设计一张数据表的表结构,符合的标准级别、规范和要