数据库的范式判断问题
关系数据库的范式判断问题
第一范式:只要是一个规则的二维表,都满足第一范式
所以这里暂时不做讨论。
下面来判断2NF,3NF,BCNF
步骤:
- 首先判断bcnf。如果是bc范式,则必定也满足3nf,2nf
- 再判断2nf
- 最后判断3nf
需要明确的概念:
-
候选键的求解
-
主属性和非主属性
-
部分函数依赖
-
传递函数依赖
-
以及决定因子,函数依赖等基本概念
判断bcnf
- 求出所有的候选键
- 对于属性集中的每一个x->y,观察x里面是不是含有候选键。
- 如果存在一个决定因子x,它不含有候选键。则不属于bcnf
例题:
R(A,B,C)
F:{B->C, AC->B}
- 求出候选键:AC,AB
- 观察F中的函数依赖,因为B不含有候选键。因此不属于bcnf
判断2nf
- 在判断完bcnf后。再判断2nf,若2nf不成立,那么就不用求3nf
- 步骤:
- 找出所有候选键
- 根据候选键,找出所有非主属性
- 观察非主属性是不是完全依赖于候选键
例题:
R(A,B,C)
F:{AC->B,C->B}
候选键:AC
非主属性:B
B部分依赖于候选键AC,所以不满足2nf。
判断3nf
步骤:
- 找出所有候选键
- 根据候选键,找出所有非主属性
- 观察非主属性是不是传递依赖于候选键