数据库规范化 BCNF 分解

Database Normalization BCNF decomposition

提问人:Jupiter 提问时间:10/3/2023 最后编辑:Jupiter 更新时间:10/3/2023 访问量:74

问:

我有一个关系模式 M,其属性为 {B, C, D, E, R} 和以下一组功能依赖关系:

  1. B、D、E -> R
  2. B、D、R -> E
  3. B、C、D -> R
  4. 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。

我还没有遇到涵盖此特定场景的示例。在这种情况下,我可能做错了什么?

数据库规范化 函数依赖关系 BCNF

评论

0赞 philipxy 10/3/2023
PK 与数据库规范化无关,只是它们是 CK。有很多算法,你在哪里使用?为什么/如何你第一次卡住/不确定?“只有”是什么意思?为什么这很重要?你的推理是什么,表明你注意到的东西不能根据BCNF的定义或算法出现?注意到它如何阻止您遵循您的算法?
0赞 philipxy 10/3/2023
你的“我有这些 FD”没有意义。“这些都是持有的 FD”?--不可能。“这些都是不平凡的FD”?--不可能。“这些是一些持有的 FD”?--问题无法回答。找出什么是封面,以及应用特定定义/规则/算法的确切条件是什么。为了确定 CK 和 NF,我们必须获得形成覆盖物的 FD。有时是最小/不可简化的封面。并且必须给出所有属性的集合。请看这个答案。
0赞 philipxy 10/3/2023
归一化后的功能依赖关系 获得与 BCNF 分解后开始时相同的 FD?
0赞 Jupiter 10/3/2023
这些都是 FD 持有的。算法如下: BCNF 分解的算法 输入:关系模式 R0 和 R0 上 FD 的集合 Σ。输出:BCNF 中关系模式的集合 S,每个关系模式都有一组以 S = {R0} 开头的 FD;迭代地对每个 R ∈ S 执行以下操作,直到 S 上没有变化:在 R 上查找违反 BCNF 的(非平凡的)FD X → Y(如果有);将 S 中的 R 替换为两个关系模式 XY 和 (R − Y),并将 FD 投影到这两个关系模式。
0赞 Jupiter 10/3/2023
我只是不知道这个 R-Y 将如何解决我的问题?如果我删除所有包含 R 的 RD,我留下的将只有 C、D -> E。但是根据这个算法,我应该有两个新的关系模式 XY 和 (R-Y),并且只有一个包含 Y,即我的问题中的 R。

答:

-1赞 Renzo 10/3/2023 #1

让我们遵循您在评论中显示的算法。

FD 违反了 BCNF,因为架构的唯一候选键是 ,因此我们将架构拆分为两个子架构:B,D,E -> RB,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
知道了,谢谢!