代码之家  ›  专栏  ›  技术社区  ›  Lahcen YAMOUN

这是boyce-codd-nf的关系吗?

  •  -1
  • Lahcen YAMOUN  · 技术社区  · 8 年前

    我有关系 R(a,b,c,d) 哪里 (a,b) 是主键,所以我有行列式 a,b -> c,d . 除此之外,我还有以下决定因素: a,c -> b,d 和 a,d -> b .

    让我们确定这段关系是3nf。 我想知道是不是在BCNF里。我用BNF的一个定义来认识:

    一个关系在bcnf中,如果它在3nf中,没有行列式 X -> Y 例如x是非键属性,y是键的一部分(或全部)

    这在我的情况下不适用于行列式 A,D->B类 例如。另一个定义是

    对于满足的每一个非平凡fd(x->a),关系r在bcnf-iff中 R表示下列条件成立:

    (a)x是r的超键

    这让我犹豫不决 a,d->b 很清楚 (a,d) 不是超级钥匙,但我们有 (甲、丁) 显然关系的关键R!

    所以,我的问题是:

    • 关系r是否在bcnf中,为什么?
    • 什么是正确的过程来确定一个关系是否在bcnf中?
    1 回复  |  直到 8 年前
        1
  •  1
  •   Renzo    8 年前

    关于术语

    你说:

    我有决定因素 a,b -> c,d

    这是错误的热学。 A、B->C、D 是一个函数依赖项(有时缩写为fd),它有一个 行列式 a,b (有时被称为FD的左手侧)和 确定的 c,d (有时称为右手侧,RHS,FD)。使用此术语是因为属性的值 甲,乙 唯一确定属性值 C、D 是的。

    关于钥匙

    以下信息:

    (a,b)是主键

    当你有足够的函数依赖关系的信息时,当关系正常化时可能是无关紧要的。从这些依赖关系中,你可以冷静下来。 候选密钥 一组属性,该属性唯一地确定关系的所有属性,使您不能从它们中移除任何属性来保持该属性(换句话说,唯一地确定关系的所有属性的最小属性集)。当您只对关系中持有的函数依赖性的部分信息时,有关主键的信息可能是相关的,但在您的情况下,所有的(候选)键的信息都可以从函数依赖关系中导出。

    例如,在您的示例中,有三个候选键:

    1. a, b
    2. a, c
    3. a, d
    

    您可以通过计算候选关键字的属性的闭包来验证该事实,以查看它是否包含所有属性。例如,让我们尝试计算 a,d (被称为 a,d * )以下内容:

    1. a,d * = a,d
    2. a,d * = a,d,b  (since a, d -> b)
    3. a,d * = a,d,b,c (since a, b -> c, d)
    

    所以 甲、丁 是一个候选键(它也是一个超级键,即一组确定关系的所有属性的属性)。

    关于BCNF

    bcnf有不同的定义。例如,你引用的第二个,所有三个依赖项都有一个行列式,它是一个候选关键字(和一个超级键),因此关系在BCNF。