三大范式(速通)

白话版三大属性:

第一范式:每个属性只能有一个值

第二范式:非主键要完全依赖于主键,联合主键(多个主键)的情况下,非主键要全都依赖

第三范式:消除传递依赖

每个范式都要在其前面范式成立的情况下

1. 第一范式(1NF)

定义

第一范式要求数据库表中的每一列都是原子的,即每个字段都不能再分割。每个字段只能存储单一的数据元素。

示例

假设我们有一个学生成绩表,存储学生的姓名、学号和课程成绩:

学号姓名课程成绩
1张三数学:85, 英语:90
2李四数学:78, 英语:82

在这个表中,课程成绩 列存储了多个值,不符合第一范式。我们可以将其拆分为多个列,使每个字段都是原子的:

学号姓名课程成绩
1张三数学85
1张三英语90
2李四数学78
2李四英语82

分析

通过将 课程成绩 列拆分为 课程成绩 两列,我们确保每个字段都是不可再分的最小单元,从而满足了第一范式。

2. 第二范式(2NF)

定义

第二范式在满足第一范式的基础上,要求非主属性完全依赖于主键(即消除部分依赖)。如果一个表的主键是由多个列组成的联合主键,则所有非主属性必须完全依赖于整个主键,而不能只依赖于其中的一部分。

示例

假设我们有一个学生选课表,存储学生的学号、姓名、课程和成绩:

学号姓名课程成绩
1张三数学85
1张三英语90
2李四数学78
2李四英语82

在这个表中,联合主键是 学号课程,但 姓名 只依赖于 学号,而不是整个联合主键。这不符合第二范式。我们可以将其拆分为两个表,即变成单主键

学生表:

学号姓名
1张三
2李四

成绩表:

学号课程成绩
1数学85
1英语90
2数学78
2英语82

分析

通过将学生信息和成绩信息分开存储,我们确保了所有非主属性完全依赖于主键,从而满足了第二范式。

3. 第三范式(3NF)

定义

第三范式在满足第二范式的基础上,要求非主属性不依赖于其他非主属性(即消除传递依赖)。换句话说,一个非主属性不能依赖于另一个非主属性。

示例

假设我们有一个课程表,存储课程编号、课程名称和教师信息:

课程编号课程名称教师编号教师姓名
101数学T01王老师
102英语T02李老师

在这个表中,教师姓名 依赖于 教师编号,而 教师编号 又依赖于 课程编号。这存在传递依赖,不符合第三范式。我们可以将其拆分为两个表:

课程表:

课程编号课程名称教师编号
101数学T01
102英语T02

教师表:

教师编号教师姓名
T01王老师
T02李老师

分析

通过将教师信息独立存储在一个表中,我们消除了传递依赖,从而满足了第三范式。

  • 7
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值