文章目录
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条件有:
- 所有非主属性都完全函数依赖于每一个候选键;
- 所有主属性都完全函数依赖于每一个不包含它的候选键;
- 没有任何属性完全函数依赖于非候选键的任何一组属性。