3NF 规范化问题,我可以使用派生的 FD 来确定关系不在 3NF 中吗?
3NF Normalisation Question, can I use a derived FD to determine a relation is not in 3NF?
我有以下问题:
Consider relation R(A, B, C, D, E, F, H) with the following functional dependencies:
A --> D, AE --> H, DF --> BC, E --> C, H --> E
Consider three relational schema R1(A, D), R2(E, C), and R3(A, B, E, F, H). They form a decomposition for R.
(a) Do the original functional dependencies apply in R1, R2, and R3?
(b) Is this decomposition in 3NF? Explain your answer.
我的尝试:
(a) 只要关系包含函数依赖中的属性,原始函数依赖就适用于 R1、R2 和 R3。
(b) R3 中的编号键 = {AEF, AFH}。从 R 中的 {AF}+ = {ABCDF},在 R3 中 {AF}+ = {ABF}。因此我们可以形成一个函数依赖 AF --> B,并且这个函数依赖的 LHS 不包含键。 RHS 也不只包含关键属性。
提供的解决方案没有直接解决(a),并声明分解是在 3NF 中,因为原始 FD 不违反 3NF。想知道我在这里做错了什么。谢谢!
在下文中,我假设给定的依赖项是覆盖 R
.
的依赖项
(a) Do the original functional dependencies apply in R1, R2, and R3?
当一个人分解一个关系时,覆盖的依赖不一定适用于分解的关系。当分解的关系不包含依赖项的所有属性时,就会发生这种情况。例如,在您的示例中,DF -> BC
不适用于 R1
、R2
、R3
,因为属性 DFBC
并非全部存在于单一关系(我们知道函数依赖只在关系内部有意义)。
这不一定意味着分解会遭受“依赖性损失”,因为定义更复杂:具有属性 A 和依赖性覆盖 F 的关系模式 R 的分解保留依赖性当且仅当F 的依赖项在分解关系上的投影的并集是 F 的覆盖。
在 Ullman 的数据库系统原理,计算机科学出版社,1983 年中,展示了一种算法来计算一组依赖项在分解上的投影并集的闭合。在您的特定情况下,通过应用该算法,我们可以发现依赖项 DF -> BC
实际上丢失了。
(b) Is this decomposition in 3NF?
你的回答是正确的,因为第三个分解关系不在 3NF 中。正如您正确指出的那样,此关系的候选键是 {AEF, AFH}
,而在关系中依赖 AF -> B
成立,这是违反 3NF 的依赖,因为 AF
不是超级键并且 B
不是主要属性。
我有以下问题:
Consider relation R(A, B, C, D, E, F, H) with the following functional dependencies:
A --> D, AE --> H, DF --> BC, E --> C, H --> E
Consider three relational schema R1(A, D), R2(E, C), and R3(A, B, E, F, H). They form a decomposition for R.
(a) Do the original functional dependencies apply in R1, R2, and R3?
(b) Is this decomposition in 3NF? Explain your answer.
我的尝试:
(a) 只要关系包含函数依赖中的属性,原始函数依赖就适用于 R1、R2 和 R3。
(b) R3 中的编号键 = {AEF, AFH}。从 R 中的 {AF}+ = {ABCDF},在 R3 中 {AF}+ = {ABF}。因此我们可以形成一个函数依赖 AF --> B,并且这个函数依赖的 LHS 不包含键。 RHS 也不只包含关键属性。
提供的解决方案没有直接解决(a),并声明分解是在 3NF 中,因为原始 FD 不违反 3NF。想知道我在这里做错了什么。谢谢!
在下文中,我假设给定的依赖项是覆盖 R
.
(a) Do the original functional dependencies apply in R1, R2, and R3?
当一个人分解一个关系时,覆盖的依赖不一定适用于分解的关系。当分解的关系不包含依赖项的所有属性时,就会发生这种情况。例如,在您的示例中,DF -> BC
不适用于 R1
、R2
、R3
,因为属性 DFBC
并非全部存在于单一关系(我们知道函数依赖只在关系内部有意义)。
这不一定意味着分解会遭受“依赖性损失”,因为定义更复杂:具有属性 A 和依赖性覆盖 F 的关系模式 R 的分解保留依赖性当且仅当F 的依赖项在分解关系上的投影的并集是 F 的覆盖。
在 Ullman 的数据库系统原理,计算机科学出版社,1983 年中,展示了一种算法来计算一组依赖项在分解上的投影并集的闭合。在您的特定情况下,通过应用该算法,我们可以发现依赖项 DF -> BC
实际上丢失了。
(b) Is this decomposition in 3NF?
你的回答是正确的,因为第三个分解关系不在 3NF 中。正如您正确指出的那样,此关系的候选键是 {AEF, AFH}
,而在关系中依赖 AF -> B
成立,这是违反 3NF 的依赖,因为 AF
不是超级键并且 B
不是主要属性。