前置概念
首先介绍闭包的概念,闭包就是由一个属性直接或间接推导出的所有属性的集合,例如:
由 可直接得到 和 ,间接得到 ,则 的闭包 就是 。
闭包的定义 有几种不同的说法:
设 是函数依赖集,被 逻辑蕴涵的函数依赖全体构成的集合,称为函数依赖集 的闭包,记为 。
设 和 均为关系 的属性集的子集, 是 上的函数依赖集,若对 的任一属性集 ,一旦 ,必有,且对 的任一满足以上条件的属性集 ,必有 ,此时称 为属性集 在函数依赖集 下的闭包,记作 。
计算关系 的属性集 的闭包的步骤如下:
- 第一步:设最终将成为闭包的属性集是 ,把 初始化为 ;
- 第二步:检查 中的每一个函数依赖 ,如果属性集 中所有属性均在 中,而 中有的属性不在 中,则将其加入到 中;
- 第三步:重复第二步,直到没有属性可以添加到属性集 中为止。 最后得到的 就是 。
下面列举几道关于闭包的例题:
例 1 . 已知关系模式 ,其中属性集 , ,求属性集 在函数依赖集 下的闭包 。
解析: 可以推出 , 可推出 , 可推出 ,由此可知 的闭包包含了 中的所有属性集,因此
例 2 . 已知关系模式 ,其中属性集 , ,求 、 、 。
解析: 推出 , 推出 ,所以 的闭包为 。 , 同理可得,因此,
范式的判断步骤
范式是符合某一种级别的关系模式的集合。关系数据库中的关系必须满足一定的要求, 满足不同程度要求的为不同范式。满足最低要求的范式是第一范式(1NF)。在第一范式的基础上进一步满足更多要求的称为第二范式(2NF), 其余范式以此类推。一般说来, 数据库只需满足第三范式(3NF)就行了。
第一范式:主属性(主键)不为空且不重复, 字段不可再分(存在非主属性对主属性的部分依赖)。
第二范式:如果关系模式是第一范式, 每个非主属性都没有对主键的部分依赖。
第三范式:如果关系模式是第二范式, 没有非主属性对主键的传递依赖和部分依赖。
BCNF 范式:所有属性都不传递依赖于关系的任何候选键。
对范式的判断可依据以下流程图,
例 1 . 已知关系模式 ,其中属性集 , ,该关系模式最高属于第几范式?
-
首先判断候选码
分别找出只在左边出现、左右都出现、右边出现的键。(其实能找到只在左边出现的键后,求闭包,若能导出全部的集合,便可以省去求 LR 和 R ,如果左边的不能求出全集,就要和 LR 组合求闭包)
只在左边出现( L ):
左右都出现( LR ): 、
只在右边出现( R):无
因此候选码为 ,非主属性为 、 。
-
接下来,按照以下流程依次判断: 部分依赖 、 传递依赖 、 左边都是候选码 。
-
判断是否为 1NF
(一般来说,基本所有的范式都要满足 1NF )
-
判断是否为 2NF
只有一个候选码 ,且候选码中只包含一个属性(就一个字母),所以不可能存在部分函数依赖。
-
判断是否为 3NF
这里 ,且 ,即这里 可以通过 传递推出 ,容易忽略的一点,就是还要满足 ,就是 不能直接导出 。
因此这里存在非主属性对候选码的 传递依赖 。该关系属性最高符合第二范式。
-
例 2 . 已知关系模式 ,其中属性集 , ,该关系模式最高属于第几范式?
-
判断候选码
只在左边出现( L ):
左右都出现( LR ): 、
只在右边出现( R):
只在左边出现的 显然不是候选码,因此要和 LR 组合求闭包。
求得 ,( ),因此候选码有 和 ,非主属性为 。
-
接下来,按照以下流程依次判断: 部分依赖 、 传递依赖 、 左边都是候选码 。
-
判断是否为 2NF
,非主属性 完全依赖于候选码 ,该关系模式至少满足 2NF 。
-
判断是否为 3NF
不存在非主属性对候选码的传递依赖,该关系模式至少满足 3NF 。
-
判断是否为 BCNF
当候选码为 时, ,不满足左边都是候选键,不满足 BCNF ,故为 3NF 。
-
例 3 . 已知关系模式 ,其中属性集 , ,该关系模式最高属于第几范式?
-
判断候选码
只在左边出现( L ):无
左右都出现( LR ): 、
只在右边出现( R):
这里 L 为无,因此利用 LR 求闭包。
求得 ,因此候选码有 和 ,非主属性为 。
-
接下来,按照以下流程依次判断: 部分依赖 、 传递依赖 、 左边都是候选码 。
-
判断是否为 2NF
候选码中只包含一个属性(就一个字母),所以不可能存在部分函数依赖。该关系模式至少满足 2NF 。
-
判断是否为 3NF
这里 ,但 ,因此这里不存在非主属性对候选码的 传递依赖 。该关系模式至少满足 3NF 。
-
判断是否为 BCNF
候选码有 和 ,因此左边都是候选键。该关系模式满足 BCNF 。
-
例 4 . 已知关系模式 ,其中属性集 , ,该关系模式最高属于第几范式?
-
判断候选码
只在左边出现( L ):无
左右都出现( LR ): 、 、
只在右边出现( R):
这里 L 为无,因此利用 LR 求闭包。
求得 ,因此候选码有 和 ,非主属性为 。
-
接下来,按照以下流程依次判断: 部分依赖 、 传递依赖 、 左边都是候选码 。
-
判断是否为 2NF
, ,非主属性 完全依赖于候选码,该关系模式至少满足 2NF 。
-
判断是否为 3NF
这里 ,但 ,因此这里不存在非主属性对候选码的 传递依赖 。该关系模式至少满足 3NF 。
-
判断是否为 BCNF
候选码有 和 ,因此左边都是候选键。该关系模式满足 BCNF 。
-