数据库范式1NF,2NF,3NF,BCNF


参考资料:

  1. https://www.zhihu.com/question/24696366
  2. https://segmentfault.com/a/1190000013695030

数据库范式

1NF,2NF,3NF和BCNF,实际开发中,常常需要满足1NF或者2NF


第一范式(1NF)

第一范式是属性的原子性,即属性不能再分解。属性1,属性2(属性2.1,属性2.2,属性2.3)…

学号姓名出生年月日

如果以上表格属性出生年月日,分为出生年、出生月、出生日,那就不符合第一范式。


第二范式(2NF)

第二范式是在第一范式基础上,保证记录的唯一性,每一条记录有唯一标识,非主属性不能对码存在部分函数依赖

  • 完全函数依赖和部分函数依赖:(完全)学号->院名,(部分)(学号,姓名)->院名
  • 码:码==候选码,一个属性组K,除K外的所有属性均完全依赖于K,那么K是码。一个表可以有多个码,通常选用一个码作为主码
  • 非主属性:主属性即码的任一属性
学号姓名课程号成绩

此表码为(学号,课程号),非主属性:(学号,课程号)-> 成绩,学号 -> 姓名,姓名出现了部分依赖,应当分解为:

学生表:

学号姓名

成绩表:

学号课程号成绩

第三范式(3NF)

第三范式是在第二范式基础上,消除冗余,消除了非主属性对码的传递函数依赖

学号姓名院名院长名

码为学号,学号->院名,院名->院长名,院长名和学号属于传递函数依赖,表中会出现冗余,分解为:

学生表:

学号姓名院名

学院表:

院名院长名

BCNF

BCNF是在第三范式基础上,消除主属性对码的部分与传递函数依赖

假设:

  • 一个仓库只能有一个管理员,管理员也只能在一个仓库工作
  • 仓库可以放置多种商品,对应有商品的数量
仓库名管理员物品名数量

该表的码为(仓库名,物品名)和(管理员,物品名),主属性为仓库名,管理员,物品名,以(仓库名,物品名)为主码,那么管理员存在部分函数依赖,应当分解为:

仓库表:

仓库名管理员

库存表:

仓库名物品名数量

总结

  • 1NF保证属性的原子性,是数据库必须遵守的
  • 2NF保证记录的唯一性,消除部分函数依赖
  • 3NF减少冗余,消除传递函数依赖
  • 4NF减少插入、删除、更新异常
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值