数据库第一、二、三、BC范式理解

最近准备数据库工程师考试,发现好多问表结构属于什么类型的问题,这里总结归纳一下,其中第四范式并不常见,了解下就行了。
借鉴:都讲的很详细
http://blog.csdn.net/lishehe/article/details/7747558
https://www.zhihu.com/question/24696366
第一范式
表中的属性都是不可再分的。如:
商品 、进货(数量、种类)、 销售( 数量、种类)这样的表结构中,进货属性可再分进货数量和进货种类,所以不满足第一范式。改为:商品、进货数量、进货种类、销售数量、销售种类
第二范式
消除非主属性对于码的部分函数依赖
不存在非主属性对码的部分依赖,应该为完全函数依赖
名称解释:
非主属性就是除了主键的属性,码又为候选码,就是能通过这个属性能确定表中的其他属性,候选码可以为多个属性,也可为一个属性。
部分函数依赖:假如 Y 函数依赖于 X,但同时 Y 并不完全函数依赖于 X,那么我们就称 Y 部分函数依赖于 X,就是说当前候选码中的属性也能确定其他非主属性
举例:(学号, 姓名, 年龄, 课程名称, 成绩, 学分)
(学号、课程名)->(姓名、年龄、成绩、学分),但是同样存在学号能确定姓名、年龄的情况,说明非主属性对与码是部分函数依赖,不符合第二范式
下面来讲一下不满足第二范式会存在的错误情况
数据冗余:一个学生对应多个课程情况时,会在数据库中有该学生姓名、学号等重复出现
插入异常:当插入新的课程,但是没有学生选修,那数据就插入不进去
删除异常:当要把所有的学生数据删除时,也会删除所有课程信息
修改异常:当前学生的选修课程分数要修改,将会修改所有的选修课程中的数据
第三范式
在满足第二范式的情况下,消除非主属性对于码的函数传递
简单理解就是 先满足第二范式条件,并且不存在表中的非主属性依赖码中的属性传递 还是不理解的话,看例子:
(学号)->(班级、姓名、所在学院、学院地址、学院电话)
但是 学号->所在学院->学院地址、学院电话
就是说学号可以确定所有非主属性,但是(学院地址)也依赖非主属性(所在学院),会出现传递的过程
BC范式
设关系模式R∈1NF,如果对于R的每个函数依赖X→Y,若Y不属于X,则X必含有候选码,那么R∈BCNF。
对于关系模式R,若 R为第一范式,且每个属性都不部分依赖于候选键也不传递依赖于候选键,那么称R是BC范式 。
举例:
库存表(仓库ID, 存储物品ID, 管理员ID, 数量)
(仓库ID,管理员ID)->(存储物品ID,数量)
(存储物品ID, 管理员ID)->(仓库ID,数量)
仓库ID->管理员ID
管理员ID->存储物品ID
不符合BC范式
解决办法就是要在 3NF 的基础上消除主属性对于码的部分与传递函数依赖。

仓库管理:(仓库ID, 管理员ID);
仓库:(仓库ID, 存储物品ID, 数量)。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值