繁体   English   中英

如何将表分解为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丢失了。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM