知识卡片

函数依赖的三种子类型:部分/完全/传递函数依赖

普通读书笔记卡

内容

函数依赖α→β描述的是”只要α的取值确定,β的取值就唯一确定”这种约束 关系(如学号确定了,姓名就唯一确定),这本身只是一个笼统的概念, 规范化理论真正要用的是它的三个子类型,各自对应一种不同的冗余风险。 完全函数依赖要求:β依赖于α这整个属性集,但不依赖于α的任何真子集—— 如果去掉α里的任何一个属性,依赖关系就不再成立。部分函数依赖恰恰 相反:β只依赖于α的某个真子集就够了,属于α的其他属性是多余的(例如 学生姓名只需要学号就能确定,不需要”学号+课程号”这个候选码整体)—— 这正是[[数据冗余引发的插入删除异常与更新不一致]]里冗余产生的根源之一: 非主属性对候选码只有部分依赖,说明这部分信息其实跟候选码里的某个子集 “更亲”,本该独立成表。传递函数依赖描述的是间接关系:α决定β、β又 决定γ,但β不能反过来决定α,这时α对γ的依赖是”绕了一手”的间接依赖, 而非直接由α决定(如学号决定学院,学院决定电话,学号对电话的依赖 就是传递依赖,真正决定电话的是学院这个中间属性,不是学号本身)。 这三种子类型的区分,直接对应到2NF消除部分依赖、3NF消除传递依赖 的判定标准。

参考来源

- 位置:《数据库原理(微课版)》第7章《关系数据库规范化理论》7.2.1节 "函数依赖与范式"(源文件:_epub-src/index_split_004.html) - 结论依据:原文定义"若对∀α′⊂α,函数依赖α′→β都不成立,则称β完全 函数依赖α……否则称β部分函数依赖α",以及"α→β、β→γ都是非平凡的 函数依赖,且β→α不成立,α→γ是传递函数依赖",因此可以推出三种 子类型各自的判定条件。 - 原始内容:若对∀α′⊂α,函数依赖关系α′→β都不成立,则称β完全函数 依赖α……否则称β部分函数依赖α……α→β、β→γ都是非平凡的函数依赖, 且β→α不成立,α→γ是传递函数依赖。