关系数据库:函数依赖、3NF范式、BCNF范式

1 函数依赖

函数依赖(functional dependency,FD)是一种完整性约束,是现实世界事物属性之间的一种制约关系,它广泛地存在于现实世界之中。

1.1 函数依赖

在这里插入图片描述

1.2 平凡与非平凡函数依赖

在这里插入图片描述

1.3 完全函数依赖和部分函数依赖

在这里插入图片描述
示例说明:
在这里插入图片描述

  • 完全依赖
    由学生学号、课程号可以唯一确定一门课程的分数:
    {studentNo,courseNo}—>score
    由学生学号可以唯一确定一个学生姓名:
    studentNo—>studentName
    由课程号可以唯一确定一个课程名:
    courseNo—>courseName
    studentNo 、courseNo都是 {studentNo,courseNo}的子集,
    studentNo / courseNo
    都不能唯一确定score
  • 部分依赖
    {studentNo,courseNo}—>studentName;
    {studentNo,courseNo}—>courseName;
    studentNo 、courseNo都是 {studentNo,courseNo}的子集,
    studentNo—>studentName;
    courseNo—>courseName

1.4 传递函数依赖

在这里插入图片描述
示例说明:
在这里插入图片描述

  • 传递依赖
    由学生学号可以唯一确定一个班级编号、班级名称、学院名称:
    studentNo—>{classNo, className, institute};
    由班级编号可以唯一确定一个班级名称、学院名称:
    classNo—>{className, institute};
    且由classNo不能唯一确定studentNo
    从上述两个函数依赖关系中可以得出:
    studentNo—>{className, institute},故存在传递依赖。

2 范式(Normal Form)

  基于函数依赖理论,关系模式可分成第一范式(1NF),第二范式(2NF),第三范式(3NF)和 Boyce-Codd 范式(BCNF)。这几种范式的要求一个比一个严格,它们之间的联系为BCNF ⊂ 3NF ⊂ 2NF ⊂ 1NF。即满足 BCNF 范式的关系一定满足3NF范式,满足3NF 范式的关系一定满足2NF范式,满足2NF范式的关系一定满足1NF范式。

1NF 每个属性对应的域值都是不可分的
2NF 所有非主属性都完全依赖于候选码
3NF 非主属性必须完全依赖且直接依赖于候选码
(允许存在主属性对候选码的传递依赖和部分依赖)
BCNF 消除原关系中主属性对键的部分与传递依赖

2.1 第一范式(1NF)— 码

在这里插入图片描述

2.2 第二范式(2NF)— 全部是码

在这里插入图片描述

2.3 第三范式(3NF)— 仅仅是码

在这里插入图片描述
在这里插入图片描述

2.4 Boyce–Codd范式(BCNF)

在这里插入图片描述
满足BCNF条件有:

  • 所有非主属性都完全函数依赖于每一个候选键;
  • 所有主属性都完全函数依赖于每一个不包含它的候选键;
  • 没有任何属性完全函数依赖于非候选键的任何一组属性。
发布了50 篇原创文章 · 获赞 38 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weixin_42250302/article/details/103111134