关系模式R(U,F)中,若不存在这样的码X、属性组Y及非主属性Z( Z ⊈ Y Z\nsubseteq Y Z⊈Y),使得 X → Y ( Y ↛ X ) , Y → Z X\rightarrow Y(Y\nrightarrow X),Y\rightarrow Z X→Y(Y↛X),Y→Z,则称R(U,F) ∈ \in ∈ 3NF
具有函数依赖集F的关系模式R属于3NF,则R中任何非主属性A既不部分依赖于码也不传递依赖于R的码
函数依赖理论
正则覆盖
函数依赖集可能存在冗余依赖(这些依赖可以从其他依赖中推导出来)
直观上,F的正则覆盖 F c F_c Fc没有任何冗余依赖或存在冗余部分的依赖
F c F_c Fc具有和F相同的函数依赖集闭包。其意义在于:验证 F c F_c Fc比验证F更容易,3NF算法必备
无关属性
如果去除函数依赖中的一个属性不改变该函数依赖集的必报,则称该属性是无关属性
形式化定义:考虑函数依赖集 F F F及其 F F F中函数依赖 α → β \alpha\rightarrow\beta α→β:
如果 A ∈ α A\in\alpha A∈α并且 F F F逻辑蕴含( F − { α → β } ∪ { ( α − A ) → β } F-\{\alpha\rightarrow\beta\}\cup\{(\alpha-A)\rightarrow\beta\} F−{α→β}∪{(α−A)→β}),则属性A在 α \alpha α中是无关的
如果 A ∈ β A\in\beta A∈β并且函数依赖集( F − { α → β } ∪ { α → ( β − A ) } F-\{\alpha\rightarrow\beta\}\cup\{\alpha\rightarrow(\beta-A)\} F−{α→β}∪{α→(β−A)})逻辑蕴含F,则属性A在 β \beta β中是无关的
对于 R = ( R 1 , R 2 ) R=(R_1,R_2) R=(R1,R2),我们要求模式 R R R上的所有可能关系r都有 r = ∏ R 1 ( r ) ⋈ ∏ R 2 ( r ) r=\prod_{R_1}(r)\bowtie\prod_{R_2}(r) r=∏R1(r)⋈∏R2(r)
如果下面的依赖中至少有一个属于 F + F^+ F+,那么将R分解成 R 1 R_1 R1和 R 2 R_2 R2是无损分解连接:
R 1 ∩ R 2 → R 1 R_1\cap R_2\rightarrow R_1 R1∩R2→R1
R 1 ∩ R 2 → R 2 R_1\cap R_2\rightarrow R_2 R1∩R2→R2
即 R 1 ∩ R 2 R_1\cap R_2 R1∩R2是 R 1 R_1 R1或 R 2 R_2 R2的超码
上述函数依赖测试只是无损连接的一个充分条件,只有当所有约束都是函数依赖时,它才是必要条件
保持依赖
F为模式R上的一个函数依赖集, R 1 , R 2 , . . . , R n R_1,R_2,...,R_n R1,R2,...,Rn为R的一个分解,F在 R i R_i Ri上的限定是 F + F^+ F+中所有只包含 R i R_i Ri中属性的函数依赖的集合 F i F_i Fi