函数依赖、码、范式

函数依赖

  • 设R(U)是一个属性集U上的关系模式,X和Y是U的子集若对于R(U)的任意一个可能的关系r,r中不可能存在两个元组在X上的属性值相等, 而在Y上的属性值不等, 则称 “X函数确定Y” 或 “Y函数依赖于X”,记作X→Y。
  • X称为这个函数依赖的决定属性集(Determinant)。
  • Y=f(x)

函数依赖可以从不同的角度分为

  • 平凡函数依赖与非平凡函数依赖
  • 完全函数依赖与部分函数依赖
  • 传递函数依赖

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

函数依赖、码、范式_第1张图片

完全函数依赖与部分函数依赖

  • 定义:
    • 在关系模式R(U)中,如果X→Y,并且对于X的任何一个真子集X ′ ,都有
    • X′ → Y, 则称Y完全函数依赖于X,记作X → Y。
    • 若X→Y,但Y不完全函数依赖于X,则称Y部分函数依赖于X,记作X→ Y。

传递函数依赖

  • 定义 在关系模式R(U)中, 如果X→Y, (Y X), Y→X ,Y→Z,则称Z传递函数依赖于X,记为:X → Z
    • 注: 如果Y→X, 即X←→Y,则Z直接依赖于X。
      函数依赖、码、范式_第2张图片

  • 定义:设K为R中的属性或属性组合。若K U,则K称为R的侯选码(Candidate Key)。
  • 若候选码多于一个,则选定其中的一个做为主码(Primary Key)。
    • 主属性和非主属性
    • 全码
      函数依赖、码、范式_第3张图片

范式

  • 范式是符合一种级别的关系模式的集合
  • 关系数据库中的关系必须满足一定的要求,满足不同程度的为不同的范式

范式的种类

函数依赖、码、范式_第4张图片

  • 某一关系模式R为第n范式,可简记为R∈nNF。
  • 一个低一级范式的关系模式,通过模式分解可以转换为若干个高一级范式的关系模式的集合,这种过程就叫规范化

1NF

  • 定义:
    • 如果一个关系模式R的所有属性都是不可分的基本数据项,则R∈1NF。简单一点来说,符合1范式的关系,就是不存在表中套表的情况
    • 关系中不存在重复行、多值列
    • 第一范式是对关系模式的最起码的要求。不满足第一范式的数据库模式不能称为关系数据库
    • 满足第一范式的关系模式并不一定是一个好的关系模式。

2NF

  • 定义:
    • 若R∈1NF,且每一个非主属性完全函数依赖于码,则R∈2NF

3NF

  • 定义:
    • 关系模式R 中若不存在这样的码X、属性组Y及非主属性Z(Z  Y), 使得X→Y,Y → X,Y→Z,成立,则称R ∈ 3NF。
      函数依赖、码、范式_第5张图片
    • 若R∈3NF,则R的每一个非主属性既不部分函数依赖于候选码也不传递函数依赖于候选码。
    • 如果R∈3NF,则R也是2NF。
    • 采用投影分解法将一个2NF的关系分解为多个3NF的关系,可以在一定程度上解决原2NF关系中存在的插入异常、删除异常、数据冗余度大、修改复杂等问题。
    • 将一个2NF关系分解为多个3NF的关系后,并不能完全消除关系模式中的各种异常情况和数据冗余。

实例分析

函数依赖、码、范式_第6张图片

  • 第一步:将UNF转换成1NF,方法是剔除表中所套的表
    函数依赖、码、范式_第7张图片
转换成1NF后,关系还存在:
    • 插入异常
    • 删除异常
    • 数据冗余度大
    • 修改复杂
  • 第二步:将符合1NF的关系分解成符合2NF的多个关系

  • 函数依赖、码、范式_第8张图片
    函数依赖、码、范式_第9张图片

  • 在2NF关系模式中,Sgrade(Sno,Cno,Grade,Result)中存在以下的函数依赖

    • (Sno, Cno)→Grade
    • Grade → (Sno, Cno)
    • Grade→Result
    • (Sno, Cno) → Result
    • Result传递函数依赖于(Sno, Cno) ,即Sgrade中存在非主属性 对码的传递函数依赖。

函数依赖、码、范式_第10张图片

  • 此问题解决方法

函数依赖、码、范式_第11张图片

BCSN

  • 定义:
    • 关系模式R∈1NF,若X→Y且Y  X时X必含有码,则R ∈BCNF。

若R∈BCNF

  • 所有非主属性对每一个码都是完全函数依赖
  • 所有的主属性对每一个不包含它的码,也是完全函数依赖
  • 没有任何属性完全函数依赖于非码的任何一组属性
    在这里插入图片描述

BCNF的关系模式所具有的性质

  • 所有非主属性都完全函数依赖于每个候选码
  • 所有主属性都完全函数依赖于每个不包含它的候选码
  • 没有任何属性完全函数依赖于非码的任何一组属性

你可能感兴趣的:(数据库)