MySQL数据库笔记——数据库三范式

大家好,这里是编程Cookbook,关注公众号「编程Cookbook」,获取更多面试资料。本文简要介绍关系型数据库设计的三范式。

数据库的三范式(3NF)是关系数据库设计中用于减少数据冗余、避免数据异常和提高数据一致性的三种规范化标准。

下面跟随 Cookbook 走进 第一范式(1NF)第二范式(2NF)第三范式(3NF) 的详细介绍:


范式

第一范式(1NF)

要求每一列都是不可拆分的原子项

第二范式(2NF)

关注公众号「编程Cookbook」,获取更多面试资料!

第二范式要求属性完全依赖于主键,而不能只依赖于主键的一部分。满足 第一范式 的基础上,解决部分依赖(Partial Dependency)的问题。

  • 关系必须满足 第一范式
  • 消除部分依赖:对于复合主键(即由多个列组成的主键),非主属性必须依赖于整个复合主键,而不是依赖于主键的一部分。

订单表中出现业务线,不同业务线的订单价格不同,那么主键就必须是订单id和业务线id(完全依赖)。

第三范式(3NF)

关注公众号「编程Cookbook」,获取更多面试资料!

第三范式要求属性直接依赖于主键,不依赖于通过其他非主属性间接依赖于主键。

  • 关系必须满足 第二范式
  • 消除传递依赖:任何非主属性都不能通过其他非主属性间接依赖于主键。

总结

范式对比

范式主要要求目标
1NF每个字段必须是原子值,且每个字段值不可分割去除重复列、确保每个列的原子性
2NF满足 1NF,且非主属性完全依赖于主键消除部分依赖
3NF满足 2NF,且非主属性不依赖于其他非主属性,直接依赖于主属性消除传递依赖

第二范式(2NF)和第三范式(3NF)的概念很容易混淆,区分它们的关键点在于:

  • 2NF:消除部分依赖,非主键列是否完全依赖于主键,还是依赖于主键的一部分;
  • 3NF:消除传递依赖,非主键列是直接依赖于主键,还是直接依赖于非主键列(具有传递的依赖)。

实际应用中的使用

在实际开发中,过度遵循范式也可能会导致性能问题(例如,表之间关联过多,增加了查询的复杂性)。因此,有时在设计数据库时,我们可能会根据业务需求和性能要求做一些折衷,来提高查询性能。

三大范式只是一般设计数据库的基本理念,可以建立冗余较小、结构合理的数据库。如果有特殊情况,当然要特殊对待,数据库设计最重要的是看需求跟性能,需求>性能>表结构。所以不能一味的去追求范式建立数据库。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值