DB2605 - 关系规范化设计
一、有函数依赖集 \(S = \{ DEF \to A,\ DF \to CE,\ A \to BDE,\ E \to B \}\),请计算它的极小函数依赖集。请简要写出极小函数依赖集计算算法(补充算法1)的计算过程。
- 令 \(G = \{DEF \rightarrow A, DF \rightarrow C, DF \rightarrow E, A \rightarrow B, A \rightarrow D, A \rightarrow E, E \rightarrow B\}\)
- 由 \(A \in (DF)_G^+ = \{D, F, C, E, A, B\}\) 故可用 \(DF \rightarrow A\) 替换 \(G\) 中的 \(DEF \rightarrow A\) 此时 \(G = \{DF \rightarrow A, DF \rightarrow C, DF \rightarrow E, A \rightarrow B, A \rightarrow D, A \rightarrow E, E \rightarrow B\}\) 经检验,此时不存在可消除的左部冗余属性
- ① 令 \(G' = G - \{A \rightarrow B\}\), 又 \(B \in A_{G'}^+ = \{A, D, E, B\}\) 故可删除 \(G\) 中 \(A \rightarrow B\),此时 \(G = \{DF \rightarrow A, DF \rightarrow C, DF \rightarrow E, A \rightarrow D, A \rightarrow E, E \rightarrow B\}\) ② 令 \(G'' = G - \{DF \rightarrow E\}\) 又 \(E \in (DF)_{G''}^+ = \{D, F, A, C, E, B\}\) 故可删除 \(G\) 中 \(DF \rightarrow E\), 此时 \(G = \{DF \rightarrow A, DF \rightarrow C, A \rightarrow D, A \rightarrow E, E \rightarrow B\}\) 经检验,此时不存在冗余的函数依赖
- 将 \(G\) 中 \(DF \rightarrow A, DF \rightarrow C\) 合并为 \(DF \rightarrow AC\) 将 \(G\) 中 \(A \rightarrow D, A \rightarrow E\) 合并为 \(A \rightarrow DE\) 故 \(G = \{DF \rightarrow AC, A \rightarrow DE, E \rightarrow B\}\)
即 \(S\) 的极小函数依赖集为 \(\{ DF \to AC, A \to DE, E \to B \}\)
二、有关系模式 \(R(A, B, C, D, E, F)\) 及其极小函数依赖集:\(\{ B \to F,\ AD \to BE,\ E \to CD \}\)
1.请计算得到关系 \(R\) 的所有候选码,简要写出候选码计算算法(补充算法2)的计算过程;
只在函数依赖左边出现的属性 \(U_L = \{A\}\)
只在函数依赖右边出现的属性 \(U_R = \{C, F\}\)
在函数依赖两边出现的属性 \(U_A = \{B, D, E\}\)
故 \(A\) 是每一个候选码的组成部分
记 \(F = \{B \to F, AD \to BE, E \to CD\}\),\(U = \{A, B, C, D, E, F\}\)
令 \(K = U - U_R = \{A, B, D, E\}\)
由 \((K - B)^+_F = \{A, B, C, D, E, F\} = U\)
故 \(K = K - B = \{A, D, E\}\)
由 \((K - D)^+_F = \{A, B, C, D, E, F\} = U\)
故 \(K = K - D = \{A, E\}\)
由 \((K - E)^+_F = \{A\} \neq U\)
故 \(R\) 的一个候选码为 \(\{A, E\}\)
同理,继续按 \(U_A = \{B, D, E\}\) 的不同顺序计算 \(K\) 可得到 \(R\) 的所有候选码为 \(\{A, E\}, \{A, D\}\)
2.关系 \(R\) 最高能够满足到第几范式?请简单说明理由;
关系 \(R\) 的非主属性为 \(\{B, C, F\}\)
对于候选码 \(\{A, E\}\),由 \(E \rightarrow CD\) 即 \(E \rightarrow C\)
有 \((A, E) \xrightarrow{P} C\),故 \(R \notin 2NF\)
故关系 \(R\) 最高能够满足到 \(1NF\)
表示候选码时使用花括号,表示函数依赖时使用圆括号
3.关系 \(R\) 是否满足 \(3NF\) ?如不满足,请调用算法 6.3 & 6.4,将关系模式 \(R\) 直接分解到满足 \(3NF\),且分解具有无损连接性和保持函数依赖性;
由 2 得 \(R \notin 2NF\),则 \(R \notin 3NF\)
令 \(P = \varnothing\),
\(Z_1(U_1, F_1) = Z_1(\{B, F\}, \{B \to F\})\),
\(Z_2(U_2, F_2) = Z_2(\{A, B, D, E\}, \{AD \to BE\})\),
\(Z_3(U_3, F_3) = Z_3(\{C, D, E\}, \{E \to CD\})\),
则 \(P = \{Z_1, Z_2, Z_3\}\)
对于关系 \(R\) 的所有候选码 \(\{A, E\}, \{A, D\}\)
\(\{A, E\} \subseteq U_2\), \(\{A, D\} \subseteq U_2\)
故 \(P = \{Z_1, Z_2, Z_3\}\)
故关系 \(R\) 满足 \(3NF\) 且具有无损连接性和保持函数依赖的分解为
\(\{Z_1(\{B, F\}, \{B \to F\}),~ Z_2(\{A, B, D, E\}, \{AD \to BE\}),~ Z_3(\{C, D, E\}, \{E \to CD\})\}\)
4.上述分解结果是否满足 \(BCNF\) ?如不满足,请调用算法 6.5 将其进一步分解到满足 \(BCNF\) 并说明理由。
对于 \(Z_2(\{A, B, D, E\}, \{AD \rightarrow BE\})\)
由极小函数依赖集 \(F\) 中的 \(E \rightarrow CD\),有 \(E \rightarrow D\) 且 \(D \notin E\)
又 \(E, D \in U_2\),\(F_2\) 是 \(F\) 在 \(U_2 = \{A,B,D,E\}\) 上的投影
故 \(E \rightarrow D\) 在 \(Z_2\) 上成立
又 \(Z_2\) 的候选码为 \(\{A, E\}, \{A, D\}\),\(E\) 不是 \(Z_2\) 的候选码
故 \(Z_2 \notin BCNF\),即 3 的分解结果不满足 BCNF
令 \(U_{S_1} = \{E, D\}, U_{S_2} = U_2 - D = \{A, B, E\}\)
由 \(E \rightarrow CD, AD \rightarrow BE\),有 \(AE \rightarrow AD \rightarrow B\)
则 \(F_{S_1} = \{E \rightarrow D\}, F_{S_2} = \{AE \rightarrow B\}\)
令 \(\sigma = \{S_1(U_{S_1}, F_{S_1}), S_2(U_{S_2}, F_{S_2})\}\)
以 \(\sigma\) 替换 \(\rho\) 中的 \(Z_2\) ,得
\(\rho = \{ Z_1(\{B, F\}, \{B \rightarrow F\}), S_1(\{E, D\}, \{E \rightarrow D\}),\) \(\quad S_2(\{A, B, E\}, \{AE \rightarrow B\}), Z_3(\{C, D, E\}, \{E \rightarrow CD\}) \}\)
经检验,此时各子模式均满足 \(BCNF\)
注意到 \(S_1(\{E, D\}, \{E \rightarrow D\}), Z_3(\{C, D, E\}, \{E \rightarrow CD\})\),实则出现了冗余
为什么?因为这里是在 \(3FN\) 的基础上进行的分解,而算法 6.5 实际上是从头 \(R(U, F)\) 开始调用
但实际上考题多要求在 3NF 基础上继续分解到 BCNF,这种情况下依然是对 3NF 每个关系使用 BCFN 算法,最终再冗余检查,大者吸收小者
命名规范:3NF 各关系名使用 \(R_i\),BCNF 需要再分解时使用 \(R_{i1}, R_{i2}\)
令 \(\rho = \{ R(U, F) \}\)
对 \(R\) 中的 \(B \to F\),\(B\) 不是 \(R\) 的候选码
令 \(U_{S_1} = \{B, F\}\),\(F_{S_1} = \{B \to F\}\)
\(U_{S_2} = U - F = \{A, B, C, D, E\}\),\(F_{S_2} = \{AD \to BE, E \to CD\}\)
令 \(\sigma = \{S_1, S_2\}\),以 \(\sigma\) 代替 \(\rho\) 中的 \(R\) 得
\(\rho = \{ S_1(\{B, F\}, \{B \to F\}), S_2(\{A, B, C, D, E\}, \{AD \to BE, E \to CD\}) \}\)
经计算,\(S_2\) 的候选码为 \(\{A, D\}, \{A, E\}\)
对 \(S_2\) 中的 \(E \to CD\),\(E\) 不是 \(S_2\) 的候选码
令 \(U_{S_3} = \{C, D, E\}\),\(F_{S_3} = \{E \to CD\}\)
\(U_{S_4} = S_2 - \{C, D\} = \{A, B, E\}\)
由 \(E \to CD\) 得 \(AE \to ACD \to AD \to BE \to B\)
故 \(F_{S_4} = \{AE \to B\}\)
令 \(\sigma = \{S_3, S_4\}\),以 \(\sigma\) 代替 \(\rho\) 中的 \(S_2\) 得
\(\rho = \{ S_1(\{B, F\}, \{B \to F\}), S_3(\{C, D, E\}, \{E \to CD\}), S_4(\{A, B, E\}, \{AE \to B\}) \}\)
经检验,此时 \(\rho\) 中各关系模式均属于 \(BCNF\)
故关系 \(R\) 满足 \(BCNF\) 的分解结果为
\(\rho = \{ S_1(\{B, F\}, \{B \to F\}), S_3(\{C, D, E\}, \{E \to CD\}), S_4(\{A, B, E\}, \{AE \to B\}) \}\)
三、有一个学生选课及研究生助教安排关系 R(学号, 课程号, 课程班号, 成绩, 助教学号),其中:
① 学号、课程号、课程班号、助教学号分别是选课的学生、课程、课程班、研究生助教的码。
② 一门课程可能开设有多个课程班,每一个课程班只能讲授一门课程;一个课程班可以安排多名研究生助教,一名研究生只担任一个课程班的助教。
③ 在一个学生和一门课程之间只能有一条选课记录、一个成绩、以及确定的一名助教;一名助教可以辅助指导多名选课的学生。
1.请写出该关系上的极小函数依赖集。(不需要写过程)
2.该关系最高能够满足到第几范式?请简单说明理由。
经计算,关系 \(R\) 的所有候选码为 {学号, 课程号},{学号,课程班号},{学号, 助教学号}
关系 \(R\) 的主属性为 {学号, 课程号, 课程班号, 助教学号},非主属性为 {成绩}
又 课程班号 \(\rightarrow\) 课程号,课程班号 不是 \(R\) 的候选码,故 \(R\) 中存在对非码的完全函数依赖
故 \(R \notin BCNF\)
检查 \(R\) 中每一个非主属性和每一个候选码之间的函数依赖:
对于候选码 {学号, 课程号},由 (学号, 课程号) \(\rightarrow\) (成绩, 助教学号) 即 (学号, 课程号) \(\rightarrow\) 成绩
对于候选码 {学号, 课程班号},由 (学号, 课程班号) \(\rightarrow\) (学号, 课程号)\(\rightarrow\) 成绩
对于候选码 {学号, 助教学号},由 (学号, 助教学号) \(\rightarrow\) (学号, 课程班号) \(\rightarrow\) 成绩
不存在非主属性对于候选码的传递函数依赖
故关系 \(R\) 最高能够满足到 \(3NF\)
\(3NF\) 的 “传递函数依赖”,是指存在 \(X \rightarrow Y\),\(Y \rightarrow Z\) 成立,且 \(Y\) 不是 \(R\) 的候选码的函数依赖
标题:DB2605 - 关系规范化设计
作者:Zwing
创建于:2026-08-08 18:53:00
更新于:2026-08-08 12:06:24
链接:https://zanytriumph.github.io/posts/数据库作业-5.html
版权声明:本文章采用 CC BY-NC-SA 4.0 进行许可