(一)两种闭包
(1)函数依赖集的闭包
- 逻 辑 蕴 含 : 给 定 一 个 关 系 模 式 r ( R ) , 如 果 r ( R ) 的 每 一 个 满 足 F 的 实 例 也 满 足 f , 则 R 上 的 函 数 依 赖 f 被 r 上 的 函 数 依 赖 集 F 逻 辑 蕴 含 ( f 逻 辑 蕴 含 F ) 。 主 观 上 来 理 解 , 就 是 函 数 依 赖 集 F 可 以 推 出 函 数 依 赖 f 。 逻辑蕴含:给定一个关系模式r(R),如果r(R)的每一个满足F的实例也满足f,\\则R上的函数依赖f被r上的函数依赖集F逻辑蕴含(f逻辑蕴含F)。\\主观上来理解,就是{\color{red}函数依赖集F可以推出函数依赖f。} 逻辑蕴含:给定一个关系模式r(R),如果r(R)的每一个满足F的实例也满足f,则R上的函数依赖f被r上的函数依赖集F逻辑蕴含(f逻辑蕴含F)。主观上来理解,就是函数依赖集F可以推出函数依赖f。
- 函 数 依 赖 集 F 的 闭 包 : 就 是 被 F 逻 辑 蕴 含 的 所 有 函 数 依 赖 的 集 合 , 记 作 F + 。 函 数 依 赖 集 的 闭 包 可 以 使 用 A m s t r o n g 公 理 以 及 另 外 三 条 规 则 来 求 : ( a ) 自 反 律 : β ⊂ α ⇒ α → β ( b ) 增 补 律 : α → β 且 γ 为 一 属 性 集 ⇒ γ α → γ β ( c ) 传 递 律 : α → β 且 β → γ ⇒ α → γ ( d ) 合 并 律 : α → β 且 α → γ ⇒ α → β γ ( e ) 分 解 律 : α → β γ ⇒ α → β 且 α → γ ( f ) 伪 传 递 律 : α → β 且 γ β → δ ⇒ α γ → δ 函数依赖集F的闭包:就是被F逻辑蕴含的所有函数依赖的集合,记作F^+。\\ 函数依赖集的闭包可以使用Amstrong公理以及另外三条规则来求:\\ (a)自反律:\beta\subset\alpha\Rightarrow\alpha\rightarrow\beta\\ (b)增补律:\alpha\rightarrow\beta且\gamma为一属性集\Rightarrow\gamma\alpha\rightarrow\gamma\beta\\ (c)传递律:\alpha\rightarrow\beta且\beta\rightarrow\gamma\Rightarrow\alpha\rightarrow\gamma\\ (d)合并律:\alpha\rightarrow\beta且\alpha\rightarrow\gamma\Rightarrow\alpha\rightarrow\beta\gamma\\ (e)分解律:\alpha\rightarrow\beta\gamma\Rightarrow\alpha\rightarrow\beta且\alpha\rightarrow\gamma\\ (f)伪传递律:\alpha\rightarrow\beta且\gamma\beta\rightarrow\delta\Rightarrow\alpha\gamma\rightarrow\delta 函数依赖集F的闭包:就是被F逻辑蕴含的所有函数依赖的集合,记作F+。函数依赖集的闭包可以使用Amstrong公理以及另外三条规则来求:(a)自反律:β⊂α⇒α→β(b)增补律:α→β且γ为一属性集⇒γα→γβ(c)传递律:α→β且β→γ⇒α→γ(d)合并律:α→β且α→γ⇒α→βγ(e)分解律:α→βγ⇒α→β且α→γ(f)伪传递律:α→β且γβ→δ⇒αγ→δ
(2)属性集的闭包
- 函 数 确 定 : 如 果 α → B , 那 么 属 性 B 被 α 函 数 确 定 。 函数确定:如果\alpha\rightarrow B,那么属性B被\alpha函数确定。 函数确定:如果α→B,那么属性B被α函数确定。
- F 下 α 的 闭 包 : 函 数 依 赖 集 F 下 被 α 函 数 确 定 的 所 有 属 性 的 集 合 , 即 为 α + 。 求 解 F 下 α 的 闭 包 可 以 先 将 α 加 入 到 α + 中 , 然 后 循 环 遍 历 所 有 函 数 依 赖 F i ( 记 作 α i → β i ) , 如 果 α i ⊂ α + , 那 么 就 将 β i 加 入 到 α + 中 。 当 α + 不 再 加 入 新 属 性 , 算 法 终 止 。 F下\alpha的闭包:函数依赖集F下被\alpha函数确定的所有属性的集合,即为\alpha^+。\\ 求解F下\alpha的闭包可以先将\alpha加入到\alpha^+中, 然后循环遍历所有函数依赖F_i(记作\alpha_i\rightarrow\beta_i),\\ 如果\alpha_i\subset\alpha^+,那么就将\beta_i加入到\alpha^+中。 当\alpha^+不再加入新属性,算法终止。 F下α的闭包:函数依赖集F下被α函数确定的所有属性的集合,即为α+。求解F下α的闭包可以先将α加入到α+中,然后循环遍历所有函数依赖Fi(记作αi→βi),如果αi⊂α+,那么就将βi加入到α+中。当α+不再加入新属性,算法终止。
(3)正则覆盖
- 目 的 : 删 除 无 关 变 量 , 得 到 最 小 的 覆 盖 。 目的:删除无关变量,得到最小的覆盖。 目的:删除无关变量,得到最小的覆盖。
- 定 义 : F 的 正 则 覆 盖 F c 是 一 个 函 数 依 赖 集 , 使 得 F 逻 辑 蕴 含 F c 中 的 所 有 依 赖 , 而 且 F c 逻 辑 蕴 含 F 中 的 所 有 依 赖 。 定义:F的正则覆盖F_c是一个函数依赖集,使得F逻辑蕴含F_c中的所有依赖,\\而且F_c逻辑蕴含F中的所有依赖。 定义:F的正则覆盖Fc是一个函数依赖集,使得F逻辑蕴含Fc中的所有依赖,而且Fc逻辑蕴含F中的所有依赖。
- 检 验 A 是 否 为 无 关 变 量 的 方 法 : ( a ) 如 果 删 掉 箭 头 后 面 的 A , 检 验 新 F ′ 能 否 推 出 α → A ( b ) 如 果 删 掉 箭 头 前 面 的 A , 检 验 原 F 能 否 推 出 α − { A } → β 检验A是否为无关变量的方法:\\ (a)如果删掉箭头后面的A,检验新F'能否推出\alpha\rightarrow A\\ (b)如果删掉箭头前面的A,检验原F能否推出\alpha-\{A\}\rightarrow\beta 检验A是否为无关变量的方法:(a)如果删掉箭头后面的A,检验新F′能否推出α→A(b)如果删掉箭头前面的A,检验原F能否推出α−{A}→β
(二)两种范式
(1)Boyce-Codd范式(BCNF)
- 定 义 : 对 F + 中 所 有 形 如 α → β 的 函 数 依 赖 , 下 面 至 少 有 一 项 成 立 : ( a ) α → β 是 平 凡 的 函 数 依 赖 ( 即 β ⊂ α ) 。 ( b ) α 是 模 式 R 的 一 个 超 码 。 定义:对F^+中所有形如\alpha\rightarrow\beta的函数依赖,下面至少有一项成立:\\ (a)\alpha\rightarrow\beta是平凡的函数依赖(即\beta\subset\alpha)。\\ (b)\alpha是模式R的一个超码。 定义:对F+中所有形如α→β的函数依赖,下面至少有一项成立:(a)α→β是平凡的函数依赖(即β⊂α)。(b)α是模式R的一个超码。
-
B
C
N
F
分
解
BCNF分解
BCNF分解
步 骤 : 找 出 非 平 凡 的 函 数 依 赖 α → β ( 其 中 α 不 是 R 的 超 码 ) , 用 以 下 两 个 模 式 取 代 R : ( a ) ( α ∪ β )          ( b ) ( R − ( β − α ) ) 重 复 以 上 过 程 直 至 所 有 的 模 式 都 满 足 B C N F 。 更 一 般 而 言 , 如 果 α + 同 时 违 反 了 以 下 两 个 条 件 , 且 存 在 函 数 依 赖 α → β , 则 证 明 R 违 反 了 B C N F : ( a ) α + 不 包 含 R − α 的 任 何 属 性          ( b ) α + 包 含 R 的 所 有 属 性 步骤:找出非平凡的函数依赖\alpha\rightarrow\beta(其中\alpha不是R的超码),用以下两个模式取代R:\\ (a)(\alpha\cup\beta)\;\;\;\;(b)(R-(\beta-\alpha))\\ 重复以上过程直至所有的模式都满足BCNF。\\ 更一般而言,如果\alpha^+同时违反了以下两个条件,且存在函数依赖\alpha\rightarrow\beta,则证明R违反了BCNF:\\ (a)\alpha^+不包含R-\alpha的任何属性\;\;\;\; (b)\alpha^+包含R的所有属性 步骤:找出非平凡的函数依赖α→β(其中α不是R的超码),用以下两个模式取代R:(a)(α∪β)(b)(R−(β−α))重复以上过程直至所有的模式都满足BCNF。更一般而言,如果α+同时违反了以下两个条件,且存在函数依赖α→β,则证明R违反了BCNF:(a)α+不包含R−α的任何属性(b)α+包含R的所有属性
B C N F 分 解 一 定 是 无 损 分 解 ( R 1 ∩ R 2 一 定 是 R 1 或 R 2 的 超 码 ) , 但 并 不 一 定 能 保 持 依 赖 ( F 上 的 每 一 个 函 数 依 赖 都 在 其 分 解 后 的 某 一 个 关 系 上 成 立 ) , 所 以 需 要 引 入 比 B C N F 弱 的 第 三 范 式 。 BCNF分解一定是无损分解(R_1\cap R_2一定是R_1或R_2的超码),\\但并不一定能保持依赖(F上的每一个函数依赖都在其分解后的某一个关系上成立),\\所以需要引入比BCNF弱的第三范式。 BCNF分解一定是无损分解(R1∩R2一定是R1或R2的超码),但并不一定能保持依赖(F上的每一个函数依赖都在其分解后的某一个关系上成立),所以需要引入比BCNF弱的第三范式。
(2)第三范式(3NF)
- 定 义 : 在 B C N F 的 基 础 上 增 加 一 个 可 选 项 : ( c ) β − α 中 的 每 个 属 性 A 都 包 含 于 R 的 一 个 候 选 码 中 ( 不 要 求 包 含 于 同 一 个 候 选 码 ) 。 定义:在BCNF的基础上增加一个可选项:\\ (c)\beta-\alpha中的每个属性A都包含于R的一个候选码中(不要求包含于同一个候选码)。 定义:在BCNF的基础上增加一个可选项:(c)β−α中的每个属性A都包含于R的一个候选码中(不要求包含于同一个候选码)。
-
3
N
F
分
解
3NF分解
3NF分解
步 骤 : 利 用 B C N F 分 解 或 者 正 则 覆 盖 将 R 分 解 为 R 1 , R 2 , . . . , R i 后 , 如 果 R 1 , R 2 , . . . , R i 都 不 包 含 R 的 候 选 码 , 那 么 新 增 一 个 模 式 R i + 1 , R i + 1 由 R 的 候 选 码 组 成 。 步骤:利用BCNF分解或者正则覆盖将R分解为R_1,R_2,...,R_i后,如果R_1,R_2,...,R_i都不包含R的候选码,\\ 那么新增一个模式R_{i+1},R_{i+1}由R的候选码组成。 步骤:利用BCNF分解或者正则覆盖将R分解为R1,R2,...,Ri后,如果R1,R2,...,Ri都不包含R的候选码,那么新增一个模式Ri+1,Ri+1由R的候选码组成。