什么是数据库三大范式,通俗讲解 一讲就懂

数据库三大范式是什么?

  • 第一范式(1NF): 确保每列的原子性(强调的是列的原子性,即列不能够再分成其他几列)。实际上,第一范式是所有关系型数据库的最基本要求。

举例说明:
第一种表设计:

地址
青青草原,羊村,肥羊小学

第二种表设计:

小镇具体地址
青青草原羊村肥羊小学

阐述:
第一种表设计不满足第一范式,为什么不满足第一范式?因为地址列不具有原子性,能拆分成省份具体地址


  • 第二范式(2NF): 是在第一范式(1NF)的基础上建立起来的,即满足第二范式(2NF)必须先满足第一范式(1NF)
  • 第二范式要求确保表中每列与主键相关,而不能只与主键的某部分相关(主要针对联合主键),主键列与非主键列遵循完全函数依赖关系,也就是完全依赖

举例说明:
第一种表设计::

学号姓名系名系主任课程名分数
001喜洋洋信息工程系羊村村长《如何打败灰太狼》95
001喜洋洋信息工程系羊村村长《如何打败灰太狼它老婆》95
001喜洋洋信息工程系羊村村长《如何收养小灰灰》60
002美洋洋信息工程系羊村村长《如何收养小灰灰》100
002美洋洋信息工程系羊村村长《如何打败灰太狼》60
002美洋洋信息工程系羊村村长《如何打败灰太狼它老婆》60
003懒洋洋没关系黑大帅《青草100种烹饪方法》60
003懒洋洋没关系黑大帅《毛选》100
003懒洋洋没关系黑大帅《思政》100

第二种表设计(分开两个表,将表拆分为每列可依赖于首列的两张表)

选课表:

学号课程名分数
001如何打败灰太狼》95
001《如何打败灰太狼它老婆》95
001《如何收养小灰灰》60
002《如何收养小灰灰》100
002《如何打败灰太狼》60
002《如何打败灰太狼它老婆》60
003《青草100种烹饪方法》60
003《毛选》100
003《思政》100

人员表:

学号姓名系名系主任
001喜洋洋信息工程系羊村村长
001喜洋洋信息工程系羊村村长
001喜洋洋信息工程系羊村村长
002美洋洋信息工程系羊村村长
002美洋洋信息工程系羊村村长
002美洋洋信息工程系羊村村长
003懒洋洋没关系黑大帅
003懒洋洋没关系黑大帅
003懒洋洋没关系黑大帅

阐述:
就是根据主键或者联合主键,将一个表最有关联的属性分别放在一起


  • 第三范式(3NF): 是在第二范式的基础上建立起来的。第三范式指:属性不依赖于其他非主属性
  • 第三范式确保主键列之间没有传递函数依赖关系,也就是消除传递依赖

举例说明:
继续 第二范式 继续拆分:

选课表:

学号课程名分数
001如何打败灰太狼》95
001《如何打败灰太狼它老婆》95
001《如何收养小灰灰》60
002《如何收养小灰灰》100
002《如何打败灰太狼》60
002《如何打败灰太狼它老婆》60
003《青草100种烹饪方法》60
003《毛选》100
003《思政》100

学生表:

学号姓名系名
001喜洋洋信息工程系
002美洋洋信息工程系
003懒洋洋没关系

系表:

系名系主任
信息工程系羊村村长
没关系黑大帅

阐述:
第三范式,在表中,一个系名能确定一个系主任。这样,系名依赖于学号(学生)姓名,而系主任又依赖于系名,这就导致了传递依赖,3NF就是消除这种依赖。

  • 84
    点赞
  • 204
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
数据库三大范式是指: 1NF(第一范式):所有属性都是原子性的,不可再分。 2NF(第二范式):满足1NF的基础上,非主键属性完全依赖于主键。 3NF(第三范式):满足2NF的基础上,非主键属性之间不存在传递依赖。 下面以一个学生选课系统为例,说明如何用三张表满足三大范式: 学生表(Student): | 学号 | 姓名 | 性别 | 生日 | | ---- | ---- | ---- | --------- | | 001 | 张三 | 男 | 1999/1/1 | | 002 | 李四 | 女 | 2000/2/2 | | 003 | 王五 | 男 | 2001/3/3 | 课程表(Course): | 课程编号 | 课程名称 | 学分 | | -------- | -------- | ---- | | 001 | 语文 | 3 | | 002 | 数学 | 4 | | 003 | 英语 | 2 | 选课表(Selection): | 学号 | 课程编号 | 成绩 | | ---- | -------- | ---- | | 001 | 001 | 80 | | 001 | 002 | 90 | | 002 | 003 | 85 | | 003 | 001 | 70 | 以上三张表已经满足了第一范式,每个属性都是原子性的。但是存在冗余数据,例如选课表中的学号和课程编号在多个记录中重复出现。为了满足第二范式,可以将选课表拆分为两张表: 学生选课表(StudentSelection): | 学号 | 课程编号 | 成绩 | | ---- | -------- | ---- | | 001 | 001 | 80 | | 001 | 002 | 90 | | 002 | 003 | 85 | | 003 | 001 | 70 | 课程表(Course): | 课程编号 | 课程名称 | 学分 | | -------- | -------- | ---- | | 001 | 语文 | 3 | | 002 | 数学 | 4 | | 003 | 英语 | 2 | 现在每个表都有一个主键,学生选课表的主键是学号和课程编号的组合,课程表的主键是课程编号。非主键属性都完全依赖于主键。但是还存在传递依赖,例如学生表中的姓名属性和性别属性都依赖于学号,而不是直接依赖于主键。为了满足第三范式,可以将学生表也拆分为两张表: 学生表(Student): | 学号 | 生日 | | ---- | --------- | | 001 | 1999/1/1 | | 002 | 2000/2/2 | | 003 | 2001/3/3 | 学生信息表(StudentInfo): | 学号 | 姓名 | 性别 | | ---- | ---- | ---- | | 001 | 张三 | 男 | | 002 | 李四 | 女 | | 003 | 王五 | 男 | 现在每个表都满足了第三范式,不存在冗余数据和传递依赖。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值