证明分解成 3 个关系是无损的

Proof that a decomposition into 3 relations is lossless

给定具有属性集 R 和依赖集 F 的关系方案:

R = (ABCD) F = {AB -> C, B -> D; C -> A} 

函数依赖 B -> D 违反了 BCNF,因为 B 不是超键,所以我通过使用此算法将其分解为 3 个关系来转换 BCNF 中的关系:

Given a schema R.

    Compute keys for R.
    Repeat until all relations are in BCNF.
        Pick any R' having a F.D A --> B that violates BCNF.
        Decompose R' into R1(A,B) and R2(A,Rest of attributes).
        Compute F.D's for R1 and R2.
        Compute keys for R1 and R2.

我得到的结果(我检查了可用的解决方案是正确的)是:

R1:(BD), R2:(CA), R3:(BC).

我知道一个属性的转换算法是分解保留数据,我想证明一下作为练习。

通常分解为两个关系 R1 和 R2 的过程是:检查 R1 和 R2 之间的共同属性,对找到的结果进行闭包,如果闭包包含 R1 或 R2 的所有属性R2则分解保留数据,否则不保留。

在这个练习的情况下,R1、R2 和 R3 之间没有共同的属性,所以我不能做闭包来确定分解是否保留数据,我不知道我还能怎么办可以继续。怎么证明分解是无损的?

为了证明分解是无损的,您可以按照分解算法的步骤分两步进行。

从您的模式开始,让我们应用算法的第一步。

(1) R = (ABCD) F = {AB -> C, B -> D; C -> A}

考虑到 B -> D 违反了 BCNF(因为候选键是 ABBC),我们将 R 分解为:

(2) R1 = (BD), F1 = {B -> D} and R2 = {ABC}, F2 = {C -> A, AB -> C}

这里我们可以证明R1和R2是无损分解,因为它们的交集是{B},它是F1的候选键(根据你引用的定理)。

现在,由于C -> AR2不在BCNF中,根据算法我们必须在R3 = (CA)R4 = (CB)中分解R2,所以最终分解为{R1 = (BD), R3 = (CA), R4 = (CB)}。为了证明 R 的分解是无损的,我们可以使用另一个定理:

If ρ = {R1,..., Rm} is a lossless decomposition of R<T,F> (where T are the attributes of R and F are a cover of the dependencies of R), and σ = {S1, S2} a lossless decomposition of R1 with respect to π(T1)(F), then the decomposition {S1, S2, R2, ..., Rm) is lossless with respect to F.

在定理中,π(T1)(F)是依赖F在属性T[=上的投影37=]1 的 R1.

在这种情况下,我们分解 R2(ABC) 和 π(T2)(F) = {C -> A , AB -> C},因此可以应用该定理,因为 R3 和 R4 是关于这些依赖项的无损分解。