数据库范式详解

第一范式、第二范式、第三范式、BC范式

第一范式

  数据表中的每个字段都是最小的数据单元,不可分割,保证字段的原子性。
  本文借知乎刘慰教师的例子来说明范式,如下表不满足第一范式:
不满足第一范式示例

分割后即可满足第一范式:
满足第一范式示例

第二范式

  在满足第一范式的基础下,数据表中的每一个非主属性都完全依赖于任何一个候选码(关键字),即满足第二范式。

判断是否是第二范式:

 1.找出所有码;
 2.判断出所有主属性和非主属性;
 3.判断每一个非主属性是否完全依赖于任何一个码。

 示例:
不满足第二范式

  因为该表不能直接通过一个属性来区分每个元组,可以通过学号和课程共同区分元组,所以该表的码为(学号,课程),以下分析:
(学号,课程)—P→姓名,因为学号—F→姓名
(学号,课程)—P→系名,因为学号—F→系名
(学号,课程)—P→系主任,因为学号—F→系主任
  因为非主属性部分依赖于码,所以该表不符合第二范式,若想符合第二范式可以通过成绩表、学生表两张表来实现。
在这里插入图片描述

第三范式

  在满足第二范式的基础下,数据表中的每一个非主属性都直接依赖于码,不存在传递依赖。

再用上面满足第二范式的表来示例:
  因为学号→系名,系名→系主任,存在传递依赖,所以不满足第三范式,需要将系名和系主任建一张新表。
在这里插入图片描述

BC范式

  BCNF 在第三范式的基础上,数据库表中如果不存在任何字段对任一候选关键字段的传递函数依赖则符合第三范式。

  (1)所有非主属性对每一个码都是完全函数依赖;
  (2)所有的主属性对于每一个不包含它的码,也是完全函数依赖;
  (3)没有任何属性完全函数依赖于非码的任意一个组合。

  R属于3NF,不一定属于BCNF,如果R属于BCNF,一定属于3NF。
不满足BC范式示例

  如上图表,一个管理员只在一个仓库工作;一个仓库可以存储多种物品。可知有如下关系:

  (仓库ID, 存储物品ID) →(管理员ID, 数量)

  (管理员ID, 存储物品ID) → (仓库ID, 数量)

  所以,(仓库ID, 存储物品ID)和(管理员ID, 存储物品ID)都是该表的候选关键字,表中的唯一非关键字段为数量,符合第三范式。但是,由于存在如下决定关系:

  (仓库ID) → (管理员ID)

  (管理员ID) → (仓库ID)

  即存在关键字段决定关键字段的情况,也就是不满足上面的第(2)条件,所以其不符合BC范式。若想符合BC范式,应分为(仓库ID,管理员)、(仓库ID,存储物品ID,数量)两张表。

本文参考了https://blog.csdn.net/u013164931/article/details/79692402

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值