第六章 范式以及模式分解
基本概念了解
数据依赖:
数据依赖是一个关系内部属性与属性之间的一种约束关系。 这种约束关系是通过属性间值的相等与否体现出来的数据间相关联系。 它是现实世界属性间相互联系的抽象,是数据内在的性质,是语义的体现。
数据依赖分类:
函数依赖(Functional Dependency,简记为FD)
函数依赖极为普遍地存在于现实生活中。比如描述一个学生的关系,可以有学号(Sno)、姓名(Sname)、 系名(Sdept) 等几个属性。由于一个学号只对应一个学生,一个学生只在一一个系学习。因而当“学号”值确定之后,学生的姓名及所在系的值也就被唯一地确定了。属性间的这种依赖关系类似于数学中的函数y=f(x),自变量x确定之后,相应的函数值y也就唯一地确定 了。
多值依赖(Multivalued Dependency,简记为MVD) 其他
函数依赖:
可分为以下几种类型:
-
函数依赖
-
平凡函数依赖与非平凡函数依赖
-
完全函数依赖与部分函数依赖
-
传递函数依赖





码
候选码




注意:码也可以指代候选码
范式
1NF
即所有属性都是原子性的不可再分的
2NF
判断一个关系模式是否属于第二范式(2NF)的标准如下:
-
函数依赖的定义:列出关系模式中的所有函数依赖。
-
候选键的确定:确定关系模式中的所有候选键。
-
部分依赖的检查:检查是否存在部分函数依赖,即非主属性对候选键的部分依赖。
第二范式(2NF)的定义
一个关系模式R属于2NF,当且仅当:
-
它属于第一范式(1NF),即所有属性值都是原子的。
-
它不存在非主属性对候选键的部分依赖。
部分依赖指的是某个非主属性依赖于候选键的一部分,而不是整个候选键。
判断步骤
-
识别所有的函数依赖:列出关系模式中的所有函数依赖。
-
识别候选键:确定关系模式中的所有候选键。
-
检查部分依赖:对于每一个非主属性,检查它是否依赖于候选键的一部分。*(最关键的)*
如果不存在任何非主属性对候选键的部分依赖,那么这个关系模式属于2NF;否则,它不属于2NF。
示例
假设有一个关系模式 R(A, B, C) 及其函数依赖如下:
-
(A, B) → C
-
A → B
假设候选键是 (A, B)。
我们检查每个函数依赖:
-
(A, B) → C:C 是一个非主属性,依赖于整个候选键 (A, B),所以不违反2NF。
-
A → B:B 是一个非主属性,依赖于候选键的一部分 A,这违反了2NF。
由于存在一个非主属性 B 对候选键 (A, B) 的部分依赖,关系模式 R 不属于2NF。
分解为2NF
为了使关系模式 R 满足2NF,可以将其分解为两个关系模式:
-
R1(A, B):函数依赖 A → B
-
R2(A, C):函数依赖 A → C
这样分解后,每个关系模式都满足2NF的要求。
3NF
第三范式(3NF)的定义
一个关系模式R属于3NF,当且仅当:
-
它属于第二范式(2NF)。
-
对于每一个非平凡的函数依赖 ( X → Y ),要么 ( X ) 是一个超键,要么 ( Y ) 是一个主属性(属于某个候选键的一部分)。
传递依赖指的是一个非主属性依赖于另一个非主属性,而这个非主属性又依赖于候选键。
判断步骤
-
识别所有的函数依赖:列出关系模式中的所有函数依赖。
-
识别候选键:确定关系模式中的所有候选键。
-
检查每个函数依赖:对于每一个非平凡的函数依赖 ( X → Y ),检查 ( X ) 是否是一个超键,或者 ( Y ) 是否是一个主属性。
如果所有的非平凡函数依赖都满足这个条件,那么这个关系模式属于3NF;否则,它不属于3NF。
示例
假设有一个关系模式 R(A, B, C) 及其函数依赖如下:
-
A → B
-
B → C
假设候选键是 A。
我们检查每个函数依赖:
-
A → B:左侧 A 是候选键,满足3NF。
-
B → C:左侧 B 不是候选键,也不是超键,右侧 C 是非主属性,这不满足3NF。
由于存在一个函数依赖 B → C,其中 B 不是超键且 C 不是主属性,这个关系模式不属于3NF。
分解为3NF
为了使关系模式 R 满足3NF,可以将其分解为两个关系模式:
-
R1(A, B):函数依赖 A → B
-
R2(B, C):函数依赖 B → C
这样分解后,每个关系模式都满足3NF的要求。
总结
判断一个关系模式是否属于3NF的标准是:
-
它必须满足2NF。
-
对于每一个非平凡的函数依赖 ( X → Y ),要么 ( X ) 是一个超键,要么 ( Y ) 是一个主属性。
简而言之就是不存在非主属性对于码的传递函数依赖,即码应该直接决定非主属性,不能间接决定
BCNF

示例



求最小函数依赖集


注意:cg的闭包没有B(写错了)
1696

被折叠的 条评论
为什么被折叠?



