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

摘抄自https://www.zhihu.com/question/24696366

  1. 函数依赖:若在一张表中,在属性(或属性组)X 的值确定的情况下,必定能确定属性 Y 的值,那么就可以说Y函数依赖于X,写作 X → Y(一个 X 不会对应两个 Y,Y = f(X))
  2. 完全函数依赖:属性集X → Y,对于X的任意真子集X’,都有 X’ !→ Y,则称 Y完全函数依赖于X
  3. 部分函数依赖:属性集X → Y,存在X的某个真子集X’,有 X’ → Y,则称 Y部分函数依赖于X
  4. 传递函数依赖:X → Y,Y → Z (前提:Y 不包含于 X,且 Y !→ X),那么我们就称 Z 传递函数依赖于 X

在这里插入图片描述

  1. 学号 → 姓名,系名 → 系主任
  2. 分数 完全函数依赖于 姓名+课程;分数 完全依赖于 学号+课程
  3. 系名 部分函数依赖于 学号+姓名;因为单拿出来 学号可以确定系名(系名 函数依赖于 学号);单拿出来 姓名也可以确定系名
  4. 系主任 传递函数依赖于 学号;学号确定系名,系名确定系主任

注意:满足第二范式,一定满足第一范式;满足第三范式,一定满足第二范式

  1. 第一范式:列不可分
    第一范式是最基本的范式,数据表中的所有字段都是不可拆分的原子值,就说明数据表满足第一范式
    下标不符合第一范式:
    在这里插入图片描述

  1. 第二范式:不存在非主属性对候选码的部分依赖
  1. 找出所有的候选码 (能够标识一组数据唯一性的最小属性集)
  2. 所有候选码中包括的属性叫作主属性
  3. 主属性以外的属性叫作非主属性
  4. 判断是否存在非主属性是否对候选码的部分函数依赖

在这里插入图片描述

分析上图:

  1. 候选码:学号+课程 ((能够标识一组数据唯一性的最小属性集))
    查看所有每一单个属性,当它的值确定了,是否剩下的所有属性值都能确定。
    查看所有包含有两个属性的属性组,当它的值确定了,是否剩下的所有属性值都能确定。
    ……
    查看所有包含了六个属性,也就是所有属性的属性组,当它的值确定了,是否剩下的所有属性值都能确定。
    在这里插入图片描述
  2. 主属性:学号、课程
  3. 非主属性:姓名、系名、系主任、分数
  4. 判断:姓名、系名、系主任 都 部分函数依赖于 候选码
  5. 结论:不符合第二范式

将表拆分,两个表都符合第二范式
在这里插入图片描述

  1. 第一张表:
    候选码:学号+课程
    主属性:学号、课程
    非主属性:分数
    判断:分数完全函数依赖于(学号+课程)
  2. 第二张表:
    候选码:学号(考虑重名,姓名就不列为候选键)
    主属性:学号
    非主属性:姓名、系名、系主任
    判断:非主属性完全函数依赖于候选码

  1. 第三范式:不存在非属性码对候选键的传递函数依赖
    在这里插入图片描述

观察上表,

  1. 候选码:学号
  2. 主属性:学号
  3. 非主属性:姓名、系名、系主任
  4. 判断:学号 → 系名,系名 → 系主任
  5. 不符合第三范式

在这里插入图片描述


  1. BCNF是第三范式的改进

一个满足BCNF的关系模式的条件:

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

水润鹅鸣 生态广平

河北邯郸
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

威少总冠军

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值