范式判断的三个步骤
假设我们有关系模式R(A,B,C),函数依赖F={AB->C}
1.检查R中元素的闭包,也就是哪些元素或者元素组合可以根据F中函数依赖关系得到完整的R,这些元素或者元素组合就是候选码。这里AB的闭包是ABC,记作(AB)+=ABC,所以AB是候选码。
2.通过候选码确定主属性和非主属性。这里A,B是主属性,剩下的C就是非主属性。
3.判断范式标准:1NF,2NF,3NF,BCNF,4NF
各个范式定义
1NF:属性不可分割。
例如 关系模式:学生(姓名,住址),而住址又包含(区,街道),所以该模式不符合1NF
2NF:不存在非主属性对候选码的部分依赖。
例如 已知候选码是BC,非主属性是D,函数依赖中除了BC->D,还有B->D或者C->D,该模式不符合2NF
3NF:不存在非主属性对候选码的传递依赖。
例如 已知候选码是AB,非主属性是D,函数依赖中有AB->C和C->D,所以该模式不符合3NF
BCNF:不存在主属性对候选码的部分依赖和传递依赖。
4NF:非主属性不应该有多值依赖
例题
例1.已知R(A,B,C),F={B->C,AC->B}
Step1.通过闭包运算,(AB)+=ABC,(BC)+=ABC,所以候选码是AB,BC
Step2.根据候选码知,A,B,C都是主属性,例1中没有非主属性
Step3.根据范式的定义,至少为3NF(因为不存在非主属性)。现在来判断是否满足BCNF,我们发现存在主属性对候选码的部分依赖B->C,所以不满足BCNF。故例1为3NF
例2.已知R(A,B,C),F={B->C,B->A,A->BC}
Step1.通过闭包运算,(A)+=ABC,(B)+=ABC,所以候选码是A,B
Step2.根据候选码知,A,B都是主属性,剩下的C是非主属性
Step3.不存在非主属性C对候选码的部分/传递依赖,至少为3NF。现在来判断是否满足BCNF,我们发现不存在主属性对候选码的部分/传递依赖,所以满足BCNF。故例2为BCNF
例3.已知R(A,B,C,D),F={AB->D,BC->D,A->C,C->A}
Step1.通过闭包运算,(AB)+=ABCD,(BC)+=ABCD,所以候选码是AB,BC
Step2.根据候选码知,A,B,C都是主属性,剩下的D是非主属性
Step3.不存在非主属性D对候选码的部分/传递依赖,至少为3NF。现在来判断是否满足BCNF,我们发现存在主属性对候选码的部分依赖A->C,C->A,所以不满足BCNF。故例3为3NF
欢迎访问我的博客:https://colinasda.github.io/
随手记录一些计算机相关的知识点以及分享一些资源