BCNF 和函数依赖
BCNF and Functional dependency
我正在尝试了解 BCNF 的分解。我已经阅读了很多例子,但我仍然不明白一些事情。我按照这个 尝试解决以下问题:
属性是客户名称 (A)、地址 (B)、phone(C)、身份 (D),账户有编号 (E)、类型 (F) 和余额 (G)。
如果客户只有一个 ID、姓名、地址和 phone 号码,而账户只有一个号码、类型和余额,并且由一个且只有一个客户拥有,那么功能依赖性保持什么?使用 R(ABCDEFG)
的这些依赖关系给出 BCNF 分解
到目前为止我得到了什么:
首先获取题中指定的FD:
D -> ABC // If we agree on same customer ID, then we agree on the name, address and phone #
E -> DFG // If we agree Account number, then we agree on customer ID, account balance and account type
我们唯一的候选键是:{E},因为所有属性都可以用这个属性获得。
由于没有多余的左侧属性,也没有冗余的 FD,所以我得到以下关系表:
R1={D, A, B, C}
R2={E, D, F, G}
粗体
标出了这两个关系中的key
现在检查 BCNF 我们检查是否有这些关系 (R1,R2) 违反了 BCNF 的条件( 即对于 每个 函数依赖 X->Y
左侧 ( X
) 必须是一个超级键) .
现在我们可以看到 E -> DFG 有一个左边是超级键。但是 D -> ABC 没有作为超级键的左侧。所以 FD 违反了 BCNF。但是我不知道如何分解成BCNF。
当您检查分解关系的 BNCF 是否满足时,您必须分别检查每个关系的函数依赖性。
因此,在 R1={D, A, B, C}
中,唯一的(候选)键是 D
(正如您所指出的),所有 non-trivial 依赖项只有 D
作为左边部分;在 R2={E, D, F, G} 中,唯一的(候选)键是 E
,所有 non-trivial 依赖项只有 E
作为左侧部分。所以在这两种关系中都没有(non-trivial)违反BCNF的依赖关系,所以分解是正确的,不需要做任何其他事情。
我正在尝试了解 BCNF 的分解。我已经阅读了很多例子,但我仍然不明白一些事情。我按照这个
属性是客户名称 (A)、地址 (B)、phone(C)、身份 (D),账户有编号 (E)、类型 (F) 和余额 (G)。
如果客户只有一个 ID、姓名、地址和 phone 号码,而账户只有一个号码、类型和余额,并且由一个且只有一个客户拥有,那么功能依赖性保持什么?使用 R(ABCDEFG)
的这些依赖关系给出 BCNF 分解到目前为止我得到了什么:
首先获取题中指定的FD:
D -> ABC // If we agree on same customer ID, then we agree on the name, address and phone #
E -> DFG // If we agree Account number, then we agree on customer ID, account balance and account type
我们唯一的候选键是:{E},因为所有属性都可以用这个属性获得。
由于没有多余的左侧属性,也没有冗余的 FD,所以我得到以下关系表:
R1={D, A, B, C}
R2={E, D, F, G}
粗体
现在检查 BCNF 我们检查是否有这些关系 (R1,R2) 违反了 BCNF 的条件( 即对于 每个 函数依赖 X->Y
左侧 ( X
) 必须是一个超级键) .
现在我们可以看到 E -> DFG 有一个左边是超级键。但是 D -> ABC 没有作为超级键的左侧。所以 FD 违反了 BCNF。但是我不知道如何分解成BCNF。
当您检查分解关系的 BNCF 是否满足时,您必须分别检查每个关系的函数依赖性。
因此,在 R1={D, A, B, C}
中,唯一的(候选)键是 D
(正如您所指出的),所有 non-trivial 依赖项只有 D
作为左边部分;在 R2={E, D, F, G} 中,唯一的(候选)键是 E
,所有 non-trivial 依赖项只有 E
作为左侧部分。所以在这两种关系中都没有(non-trivial)违反BCNF的依赖关系,所以分解是正确的,不需要做任何其他事情。