数据库函数依赖与关系范式(5种函数依赖及1NF、2NF、3NF)

前言

        期末考试中5种函数依赖的概念一般是选择题,其中 部分函数依赖 和 传递函数依赖 在后面的大题关系范式的分析与运算中需要用到

        BCNF、4NF、5NF属于非函数依赖范围的等级,一般学校期末不考,这里不介绍

一、5种函数依赖

1、函数依赖

X→Y,X对应唯一的Y,那么X、Y的关系是 函数依赖

X对应唯一的Y 相当于 Y = f(X) 所以叫“函数”依赖

例如:

R(学号,数学成绩)该表中,学号为主码,一个学号只能对应唯一的数学成绩

那么就说 数学成绩 与 学号 的关系是 函数依赖

2、平凡与非平凡函数依赖

若 X→Y 且 Y ⊆ X ,则X、Y的关系是平凡函数依赖

例如:

R(A,B,C)中 AB→A 且 A ⊆ AB,那 ABA 的关系是 平凡函数依赖

平凡依赖就是很无聊的依赖

不是 平凡函数依赖函数依赖 都是 非平凡函数依赖

3、完全函数依赖

若 AB→C 且 A↛C,B↛C 那么 AB 与 C 的关系是 完全函数依赖

例如:

R(学号,科目,成绩) 中,(学号,科目) → 成绩,且学号↛成绩,科目↛成绩

只知道 学号 或者 只知道科目,都无法确定 成绩

此时 (学号,科目)成绩 的关系就是 完全函数依赖

4、部分函数依赖(重点)

若AB→C 且A→C,那么 AB 与 C 的关系是 部分函数依赖

例如:

R(产品,产品经理,产品价格)

此时 (产品,产品经理)→产品价格,同时 产品→产品价格

那么就说(产品,产品经理)产品价格 属于 部分函数依赖

这个概念一般会出选择题,

同时 主属性与非主属性之间没有部分函数依赖 是 2NF的判断标准

5、传递函数依赖(重点)

若 A → B,且B ↛ A,B → C,那么 A 与 C 的关系是 传递函数依赖

例如:

R(员工,部门,部门经理),员工→部门,部门↛员工,部门→部门经理

此时 员工部门经理 属于 传递函数依赖

这个概念一般会出选择题,

同时 主属性与非主属性之间没有传递函数依赖3NF的判断标准

二、关系范式判断与拆分(1NF、2NF、3NF)

概念:

1NF相当于最大的范围,2NF属于1NF,3NF属于2NF

例题:

步骤:1、找出所有函数依赖F

相当于找出所有的推导关系,根据题意写出来

假设我们找到了R(A,B,C,D,E)中

函数依赖F{AB->C,A->D,D->E}

2、找到所有候选码

在 "->" 左侧的有 A、B、D

在 "->" 右侧的有 C、D、E

只在 "->" 左侧的就是 AB

因此候选码是 AB

3、找出所有候选码的主属性

主属性为候选码的属性:A、B,其他都是非主属性:C、D、E

4、判断范式等级

一般的题目都是1NF,咱们只需要再判断是否为2NF,若为2NF再判断是否为3NF

(3NF⊆2NF⊆1NF)

①判断是否为2NF

需要找出步骤3中的 主属性 与 非主属性

再比较 主属性 与 非主属性 之间是否存在 部分函数依赖

若不存在 则范式等级为2NF

②若范式等级为 2NF ,再进行判断是否为3NF

需要找出步骤3中的 主属性 与 非主属性

再比较 主属性 与 非主属性 之间是否存在 传递函数依赖

若不存在 则范式等级为3NF

例题:

判断是否为2NF:

由于主属性为 AB,则存在 AB->D 且 A->D 此时 AB 和 D 为部分函数依赖

那么R不属于2NF,自然不需要判断R是否属于3NF

那么R属于 1NF

5、关系范式拆解

思路是将原题中范式等级为1NF的R分解成无数小R

使得每一个小R都符合2NF的标准(不存在部分函数依赖)

再将2NF的小R分解成小小R

每个小小R都要符合3NF的标准(不存在传递函数依赖)

例题:

①1NF拆成2NF

先将R(A,B,C,D,E)拆成 2NF (把所有部分函数依赖的关系都拆开)

R1(A,B,C)、R2(A,D,E)

②2NF拆成3NF

此时判断一下

R1 不存在传递函数依赖,那R1已经符合3NF标准

R2 (A,D,E) 中 A -> D , D ↛  A , D -> E

那么 A 与 E 为传递函数依赖 需要将 R2 再细分为 3NF 标准的 R

R2(A,D,E) 拆解成 R2(A,D) R3(D,E)

此时R1(A,B,C)、R2(A,D)、R3(D,E)即为所求分解后的3NF范式

  • 23
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

震惊铁豪

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

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

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

打赏作者

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

抵扣说明:

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

余额充值