📜  各种范式 (NF) 中允许的函数依赖 (FD)(1)

📅  最后修改于: 2023-12-03 15:37:09.795000             🧑  作者: Mango

各种范式(NF)中允许的函数依赖(FD)

引言

在关系型数据库设计中,函数依赖是一个重要的概念。在设计关系模式时,我们希望它能够满足各种范式(NF)的要求,以保证数据的正确性和一致性。不同的范式对函数依赖有不同的要求,本文将梳理在各种范式中允许的函数依赖。

一、第一范式(1NF)

第一范式要求关系模式中的每一个属性都是原子性的,即不可分割的。此时,我们允许存在任意的函数依赖,包括部分依赖和传递依赖。

二、第二范式(2NF)

第二范式要求关系模式必须满足1NF,并且非主属性必须完全依赖于候选键。在这种情况下,允许存在部分依赖,但不允许存在传递依赖。

例如,考虑一个关系模式R(A,B,C,D),其中A是主键(即候选键)。如果存在以下函数依赖:B->C、C->D,那么关系模式R就不满足2NF。此时,可以将关系模式拆分为两个模式:R1(A,B,C)和R2(C,D)。

三、第三范式(3NF)

第三范式要求关系模式必须满足2NF,并且非主属性不依赖于其他非主属性。在这种情况下,允许存在传递依赖,但不允许存在直接依赖。如果存在直接依赖,则需要将其拆分为两个模式。

例如,考虑一个关系模式R(A,B,C,D,E),其中A是主键(即候选键)。如果存在以下函数依赖:B->C、C->DE,那么关系模式R就不满足3NF。此时,可以将关系模式拆分为两个模式:R1(A,B,C)和R2(C,D,E)。

四、巴斯-科德范式(BCNF)

巴斯-科德范式要求关系模式必须满足3NF,并且不存在任何的非平凡函数依赖:如果X->Y是一个函数依赖,那么X一定是候选键(即主键)或超键。

这意味着,如果有非平凡的函数依赖存在,则需要将其拆分为两个模式。例如,考虑一个关系模式R(A,B,C,D,E),其中A和B是候选键。如果存在以下函数依赖:AB->C,C->D,那么关系模式R就不满足BCNF。此时,可以将关系模式拆分为两个模式:R1(A,B,C)和R2(C,D,E)。

五、第四范式(4NF)

第四范式要求关系模式必须满足BCNF,并且不存在任何多值依赖(这是一种特殊的函数依赖)。

多值依赖指的是如果X->Y,那么对于X的任意两个不相等的值x1和x2,都有且仅有一组值z1和z2,它们与x1和x2对应,且z1和z2只是在Y的某些属性上不同。

如果存在多值依赖,则需要将其拆分为两个模式。例如,考虑一个关系模式R(A,B,C,D),其中A是主键。如果存在以下多值依赖:A->->B,那么关系模式R就不满足4NF。此时,可以将关系模式拆分为两个模式:R1(A,B)和R2(A,C,D)。

六、总结

在关系型数据库设计中,我们需要保证数据的正确性、一致性和简洁性。各种范式提供了不同的规则来指导我们设计关系模式。在设计模式时,需要特别关注函数依赖,确保其满足各种范式的要求。