跳转至

数据库范式分解由3NF至BCNF的困惑

在复习数据库方式分解时遇到的一些困惑和解答

背景

今天在学习数据库范式分解,从3NF至BCNF时做了一道练习题,让我十分困惑。

image-20250220204701601

理解

此时的核心问题就是该关系模式到底是几范式,首先,显而易见满足1NF

对2NF,是否有部分函数依赖(每一个非码属性(不在主键中的列)都必须完全函数依赖于候选码)?很多人在这里对(S,T)->J,T->J有疑惑,感觉像是存在部分函数依赖 首先先问自己一个问题,T是码吗?码要能唯一确定一个元组,T不可以所以T不是码。所以T->J也就不算部分函数依赖,所以2NF是成立的。

对3NF,明显不存在传递函数依赖。

怎么判定BCNF?有两条路径

  1. 由定义出发,关系模式R中,如果每一个决定属性集(即F(x) -> y 唯一)都包含候选码,则R∈BCNF。

    对T->J,T不是候选码,所以不满足BCNF

  2. 从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)

评论