数据库设计的三范式

本文详细介绍了数据库的三范式(1NF,2NF,3NF),包括它们的目的、定义以及如何判断是否满足。1NF要求字段不可再拆分,2NF强调主键决定所有非主键,3NF则排除了依赖传递。通过实例说明了每个范式的重要性。
摘要由CSDN通过智能技术生成

为什么会有“三范式”?

数据库的三范式是为了设计更为合理数据库表结构,从而提高数据存储和使用的性能。

哪“三范式”?

答:第一范式、第二范式、第三范式。
当然除了三范式之外还有“巴斯-科德范式”(BC范式)、第四范式、第五范式。
本文着重介绍第一、第二、第三范式。

所有高级别的范式都是在低级别的范式之上建立的,也就是说第二范式必然是满足第一范式的;满足第三范式的必然是满足第二、第一范式的。

第一范式(1NF)

满足原子性,即表中字段的数据不可再拆分

先看一个不满足第一范式的表:

用户编号用户名密码
1上海市张三123456
2浙江省李四123123
3江苏省王德发456456

为什么这个表不满足第一范式呢?很明显用户名字段不是原子的,也就是可以再拆分,可以将省份拆出来。

用户编号用户名密码地址
1张三123456上海市
2李四123123浙江省
3王德发456456江苏省

将用户名字段中的地址拆分成单独的一列,现在表中所有字段的数据都不可以再拆分,满足第一范式。

第二范式(2NF)

在满足第一范式的前提下,遵循唯一性,消除部分依赖;即表中任意一个主键或者任意一组联合主键,可以确定除该主键外的所有非主键值
再通俗讲,就是一个表只描述一件事。

先看一个不满足第二范式的表:

用户编号用户名密码科目成绩
1张三123456数学98
2李四123123语文98
3王德发456456数学76

为什么这个表不满足第二范式呢?假如用户编号是主键,通过用户编号可以唯一确定用户名和密码,但是却不能确定科目和成绩,科目中数学是重复的,成绩98是重复的。可以将课程和成绩拆分出来,分别描述课程和成绩。
用户表

用户编号用户名密码
1张三123456
2李四123123
3王德发456456

课程表

课程编号课程名称
1语文
2数学

成绩表

用户编号课程编号成绩
1语文98
2数学98
3数学76

这样每个表都能清楚的描述一件事,满足第二范式。

第三范式(3NF)

在满足第二范式的前提下,消除依赖传递;即在任意主键都可以确定非主键值的情况下,不能存在通过某非主键字段A还可以获取到某非主键字段B

先看一个不满足第三范式的表:

用户编号用户名密码班级班主任
1张三1234561班汪老师
2李四1231232班张老师

为什么这个表不满足第三范式呢?假如用户编号是主键,其余都是非主键。首先通过用户编号可以唯一确定用户名、 密码、班级、班主任;满足第二范式,没有可拆分字段值,满足第一范式,但是通过“1班”可以唯一确定班主任就是汪老师;通过张老师就可以唯一确定是“2班”;存在传递依赖,不满足第三范式。
再拆分一张班级表。

用户表

用户编号用户名密码
1张三123456
2李四123123

班级表

班级名称班主任
1班汪老师
2班张老师

这样就可以消除依赖,满足第三范式。

总结

第一范式(1NF):字段不可再拆分
第二范式(2NF):表中任意一个主键或者任意一组联合主键,可以确定除该主键外的所有非主键值
第三范式(3NF):在任意主键都可以确定非主键值的情况下,不能存在通过某非主键字段A还可以获取到某非主键字段B

  • 5
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

户伟伟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值