MySQL学习笔记(五)—— 三大范式

本文借用该文中的例子阐述自己对三大范式的理解


第一范式(1NF):列不可再分

第一范式要求数据库表的每一列都是不可分割的原子数据项。

例如:
在这里插入图片描述
上表中的“家庭信息”和“学校信息”列中的信息还能继续划分,因此均不满足原子性的要求。
故调整如下:
在这里插入图片描述
上表中的每一列,均不可再分,因此满足第一范式。

第二范式(2NF):各属性完全依赖于主键

在满足第一范式的前提下,每一列都需要与主键相关。
例如:
在这里插入图片描述
上表中的主键为:[订单号,产品号]。
若要满足第二范式,除主键外的其他列,都需与主键[订单号,产品号]相关。而“订单金额”和“订单时间”两列信息只与“订单号”相关,而与“产品号”无关。因此不满足2NF。
故调整如下:

在这里插入图片描述
在这里插入图片描述
将“订单金额”和“订单时间”两列信息与“订单号”自成一表,剩余信息为一表,从而满足各属性完全依赖于主键。

第三范式(3NF):属性直接依赖于主键,而不依赖于其它非主属性

在满足第二范式的前提下,各列与主键直接相关,除主键外的其他各列之间不能有联系。
例如:
在这里插入图片描述
上表中的主键为:[学号]。所有属性都依赖于“学号”,满足2NF。
但是,表中“班主任性别”和“班主任年龄”又依赖于“班主任姓名”,因此不满足 3NF。
故调整如下:
在这里插入图片描述在这里插入图片描述
调整后的上表,在满足2NF下,以满足属性之间没有间接关联。


总结

  • 范式的目的是为了设计一个结构合理、数据规范的数据库。
  • 但出于规范性和性能的考虑,最好关联查询的表不得超过三张,或故意增加某些表中的一些冗余字段将多表查询变成单表查询,获故意增加一些计算列将大数据量计算变成小数据量便于查询。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值