1

在我们的数据库课程中,我们的讲师将其作为依赖保留分解的示例进行了展示:

R(A, B, C) with F = { A->B, B->C } decomposed into R1(A, B) and R2(A, C)

为了使分解保持依赖关系,数据库系统必须能够在分解的关系之一中本地检查原始 F 的每个函数依赖关系,而无需执行任何连接。

在这里,我的理解是函数依赖B->C丢失了,因为它不能在本地检查R1R2. 但是我的导师声称它是由及物性保留的,因为A->C.

有人可以澄清为什么会这样吗?

4

1 回答 1

2

为了使分解保持依赖关系,数据库系统必须能够在分解的关系之一中本地检查原始 F 的每个函数依赖关系,而不必执行任何连接。

根据定义,给定具有函数依赖 F 覆盖的模式 R,当且仅当依赖关系 F 在分解关系上的投影的并集是 F 的覆盖时,分解是依赖保留的,其中 F 在 a 上的投影子模式由 F+(不是 F)中的所有依赖项构成,所有属性都包含在子模式中。

例如,在具有函数依赖覆盖 F = {A → B, B → C, C → A} 的模式 R(A, B, C) 中,具有分解 R1(A, B) 和 R2(B, C),F在R1上的投影包含{A→B,B→A},F在R2上的投影包含{B→C,C→B}。这是因为 B → A 和 C → B 可以从 F 的其他依赖关系导出。在这种情况下,当我们对投影进行并集时,我们会获得一组依赖关系,从中也可以导出 C → A (所以这种分解保留了依赖关系)。

在您的示例中,F 在 R1 上的投影给出 {A → B},而 F 在 R2 上的投影给出 {A → C}。将这两个集合并集,我们得到:

 {A → B, A → C}

从这个集合我们不能推导出 B → C,所以分解不会保留依赖关系。

于 2019-11-12T23:46:00.320 回答