提问人:Jupiter 提问时间:10/3/2023 最后编辑:Jupiter 更新时间:10/3/2023 访问量:74
数据库规范化 BCNF 分解
Database Normalization BCNF decomposition
问:
我有一个关系模式 M,其属性为 {B, C, D, E, R} 和以下一组功能依赖关系:
- B、D、E -> R
- B、D、R -> E
- B、C、D -> R
- C、D->E型
我想对此架构执行 BCNF 分解。此关系架构的键是 {B, C, D}。
我遵循 BCNF 分解算法,在第一步中,我确定了函数依赖关系 B、D、E -> R。根据算法,我应该创建两个组件:R1 {B, D, E, R} 和 R2 {B, C, D, E}。
现在,我的问题是关于从原始关系架构中删除属性 R。R 出现在功能依赖关系 B、D、R -> E 和 B、C、D -> R 的左右两侧。但是,B、C、D -> R 已经在 BCNF 中,如果我删除这两个依赖项,我只剩下 C、D -> E。
我还没有遇到涵盖此特定场景的示例。在这种情况下,我可能做错了什么?
答:
-1赞
Renzo
10/3/2023
#1
让我们遵循您在评论中显示的算法。
FD 违反了 BCNF,因为架构的唯一候选键是 ,因此我们将架构拆分为两个子架构:B,D,E -> R
B,D,C
R1(B,D,E,R) (all the attributes of the FD)
R2(B,D,C,E) (the attributes of the relation without the determinate, R)
FD 在 R1 上的投影的闭合点为:
B,D,E -> R
B,D,R -> E
因此,架构位于 BCNF 中,因为只有两个候选键是 和 ,并且在两个 FD 中,行列式都是候选键。(B,D,E)
(B,D,R)
FD 在 R2 上的投影的闭合点为:
C,D -> E
但是,由于不是 R2 的候选键(候选键是 ),我们必须将此模式拆分为两个模式:(C,D)
(B,C,D)
R3(C,D,E), with closure of the projected FDs C,D -> E
R4(B,C,D), with no non-trivial dependencies
所以两者都在 BCNF 中。
因此,最终的、正确的分解是 R1、R3、R4,并且这种分解同时保留了数据和依赖关系。
评论
0赞
Jupiter
10/3/2023
我还有一个问题。有一种说法是,“既无损又保留依赖关系的 BCNF 分解并不总是存在的。所以,我曾经认为 R1 只包含一个 FD,即 B、D、E -> R。因此,B、D、R -> E 丢失,分解不具有依赖性。这有意义吗?
0赞
Renzo
10/4/2023
一件事是在某种情况下给出的 FD,我们称它们为集合 F,另一件事是一组 FD 的闭包,通常称为 F+,通过以所有可能的方式应用所谓的阿姆斯特朗公理获得。出于这个原因,应该给出一组依赖关系的最小覆盖,即等同于另一组的最小依赖关系集。例如,在您的示例中,依赖项的可能覆盖是 {B, D, E -> R;B、D、R -> E;C, D -> E}.从这些可以派生出所有其他依赖项。因此,某些看似丢失的依赖项根本没有丢失......
0赞
Renzo
10/4/2023
如果将归一化算法应用于具有最小覆盖率的关系模式,则它们会更简单。此外,存在正态形式的等效定义,但对依赖关系的覆盖最小。
0赞
Jupiter
10/5/2023
知道了,谢谢!
上一个:保留依赖关系的分解
下一个:这种关系如何生成候选密钥?
评论