0

我以这种方式找到了关系-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)

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

4

1 回答 1

1

你的第一个分解是不正确的,而第二个是。为了在 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丢失了。

于 2016-10-29T20:12:44.613 回答