type
status
date
slug
summary
tags
category
icon
password
📌 前言:
数据库原理笔记-范式级别判断
题目:U=ABCDE, F={A→C, BC→D, CD→A, AB→E}
第一步(求候选码):
求候选码的过程略去,结果为{(AB),(BC)}
第二步(判断1NF):
肯定都是1NF,不是的话这题不用出了
第三步(写出非主属性、候选码):
这一步是为了方便后续判断;
非主属性是未出现在候选码中的属性,本题为 DE ;
候选码为 AB 和 BC;
如下列出:
非主属性:DE
候选码:AB、BC
在题干中标记非主属性:
F={A→C, BC→D, CD→A, AB→E}
第四步(判断2NF):
2NF的定义为非主属性应完全函数依赖于任一候选码。即看非主属性的左侧的推断条件中是否出现了候选码,也就是题目中 D 和 E 的左侧是否出现了 AB 或 BC(AB 或 BC 必须一起打包出现,不能只出现单个的 A、B 之类)。
举例来说,假如题目中存在 A→D,D 是非主属性,而左侧只有 A,没有和 B 一起出现,即 D 不是完全函数依赖于候选码 AB 的,它只部分依赖了 AB 中的 A。
观察当前题目,非主属性 D 和 E 的左侧均是候选码之一,并不存在这种情况,那么它是满足 2NF 的。
第五步(判断3NF):
在满足 2NF 的前提下(注意满足 2NF 之后再看 3NF ),3NF的定义为不存在非主属性对任一候选码的传递函数依赖。
举个例子,如果有 AB→D,又有 D→E,即非主属性 E 通过非主属性 D 作为桥梁才能推出,这就是传递依赖。尽管候选码 AB 能推出 D 和 E,但 E 是间接推出的,也不可以出现。
继续观察题目,并没有这种情况,那么是满足 3NF 的。
第六步(判断BCNF):
在满足 3NF 的前提下,BCNF 的条件是每一个决定因素(即每一个依赖关系的左侧)都包含码。即决定因素必须包含候选码中的任意一个。即在本题中,每个决定因素要么有 AB,要么有 BC。要么 A 和 B 成对出现,要么 B 和 C 成对出现。
该题中,第一个关系 A→C 就只出现了 A,A 没有和 B 一起出现,所以本题不满足 BCNF。
注意这里和 2NF 的区别:2NF 只看针对非主属性的左侧,而 BCNF 要看所有依赖关系的左侧。
因此本题为 3NF。
(玄学:实在不会就写 3NF,3NF 出现的概率大些)
<ins/>