数据库范式分解由3NF至BCNF的困惑
在复习数据库方式分解时遇到的一些困惑和解答
背景
今天在学习数据库范式分解,从3NF至BCNF时做了一道练习题,让我十分困惑。
理解
此时的核心问题就是该关系模式到底是几范式,首先,显而易见满足1NF
对2NF,是否有部分函数依赖(每一个非码属性(不在主键中的列)都必须完全函数依赖于候选码)?很多人在这里对(S,T)->J,T->J有疑惑,感觉像是存在部分函数依赖 首先先问自己一个问题,T是码吗?码要能唯一确定一个元组,T不可以所以T不是码。所以T->J也就不算部分函数依赖,所以2NF是成立的。
对3NF,明显不存在传递函数依赖。
怎么判定BCNF?有两条路径
-
由定义出发,关系模式R中,如果每一个决定属性集(即F(x) -> y 唯一)都包含候选码,则R∈BCNF。
对T->J,T不是候选码,所以不满足BCNF
-
从3NF的基础上深化,BCNF范式即在满足第三范式(3NF)基础上,任何非主属性不能对主键子集依赖(即在3NF基础上,消除主属性对候选码的部分函数依赖和传递函数依赖)。
对该关系
主属性:S,T,J;码:(S,J),(S,T)
因为 (S,T)->J;(S,J)->T,所以存在部分函数依赖
如何分解范式,使其达到BCNF?
把关系模式STJ(S,T,J)拆解成满足BCNF的若干个关系模式,如ST(S,T)与TJ(T,J)