【问题标题】:How to decompose table to 3NF and BCNF如何将表分解为 3NF 和 BCNF
【发布时间】:2016-10-30 04:12:44
【问题描述】:

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

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

【问题讨论】:

  • 在您的第一次分解中,您如何处理 N->RCT?在您的第二个中,Z->CT 发生了什么?
  • @MikeSherrill'CatRecall' 在我的第一次分解中,我只考虑 N->RCT 和 Z->CT 依赖项,因为使用名称我可以获得街道、城市和州。如果我能得到城市和州,则使用 zip。然后我将 R2 关系创建为 R2(Z,C,T)。而这里的 R1(N,R,Z) 我认为 Z 是外键。
  • 规范化不是要找到可导航的路径。规范化不会丢弃函数依赖。 (RCT->Z?)
  • 您需要找到一个参考,说明在 3NF 或 BCNF 中的含义以及哪些算法将分解为它们(如果可能,无损)以及它们的输入和输出是什么。

标签: database database-normalization 3nf bcnf


【解决方案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 丢失了。

【讨论】:

    猜你喜欢
    • 2020-07-20
    • 2021-08-04
    • 1970-01-01
    • 2014-01-02
    • 2016-02-15
    • 2013-11-14
    • 2014-11-24
    • 2012-12-14
    相关资源
    最近更新 更多