如何将table分解为3NF和BCNF

How to decompose table to 3NF and BCNF

我这样找到了关系 - CUSTOMER (NAME, STREET, CITY, STATE, ZIP)

以下各方式使用缩写,

Name - N
STREET - R
CITY - C
STATE - T
ZIP - Z

并给定 F = {N->RCT, RCT->Z, Z->CT}

问题分解为3NFBCNF

我把它分解成3NF,这里我考虑了实用的方法,

R1(N,R,Z)
R2(Z,C,T)

是否正确?

或者我是否必须只考虑分解的给定函数依赖性。如果我这样想并分解为3NF,那么答案就是

R1(N,R,C,T)
R2(R,C,T,Z)

请有人告诉我正确的方法。

你的第一个分解不对,第二个是。要在 3NF 中分解,“合成”算法的第一步需要找到依赖集的规范覆盖,然后将找到的依赖分组到具有相同左侧的组中。

由于你的依赖项中没有多余的依赖项或多余的属性,我们可以从三个依赖项开始,它们有不同的左手边,产生三个关系:

 from N → RCT, R1 (N, R, C, T), with key N
 from RCT → Z, R2 (R, C, T, Z), with key RCT
 from Z → CT, R3 (C, T, Z), with key Z

然后,注意到第三个关系完全包含在第二个关系中,我们可以消除它。该算法的最后正式步骤要求我们检查在某些分解关系中是否存在原始关系的键(否则应添加具有键的新关系)。这是真的,因为 Z 是这样一个键,它存在于第二个关系中。所以,最终分解为:

 R1 (N, R, C, T), with key N
 R2 (R, C, T, Z), with key RCT

请注意,通过应用“分析”算法来查找 BCNF,我们获得了不同的解决方案:

R1 <(N, R, C, T),
    { N → RCT }>

R2 <(C, T, Z),
    { Z → CT } >

R3 <(R, Z),
    { } >

但在此分解中,函数依赖性 CRT → Z 丢失了。