0

考虑表 zoo(a,b,c,d,e,f,g) 和 FD

a → b,d,e,g
c,d → f
f → c
e,g → d

对其进行归一化。

候选键是 {a,c} {a,f},所以素数是 {a,c,f}

2NF 被 a → b,d,e,g 违反

然后新表是 t1(a,b,d,e,g), zoo(a,c,f)

3NF 被 e,g → d 违反

然后新表是 t2(e,g,d), t1(a,b,e,g), zoo(a,c,f)

BCNF 违规是素数 -> 素数,但是 c 和 f 是素数但 d 是非素数,因此 lhs 具有素数和非素数,而 rhs 是素数。

那么我的问题是如何处理 FD c,d → f?

4

1 回答 1

1

TL; DR您似乎不了解规范化。你最后的问题句子没有意义。

  1. 对给定 NF 的标准化不会通过较低的 NF。(当然,您可能被告知要标准化为 2NF,然后是 3NF,然后是 BCNF。)

  2. 对给定 NF 的规范化涉及遵循一种已被证明可以帮助您实现目标的算法。最好是“保留 FD”。找一个算法。

  3. 分解后,您必须确定每个新组件的 FD 和 CK。还要注意,持有的 FD 是给定的,加上遵循阿姆斯特朗公理的那些。

  4. “BCNF 违规是素数 -> 素数 ...” 难以理解。细节很重要。查找教科书定义。您没有正确说明/使用涉及 3NF 和主要属性的 BCNF 定义。

查找用于规范化的学术教科书/演示文稿/课程参考。遵循他们的定义和算法。

分解 t2(e,g,d), t1(a,b,e,g), zoo(a,c,f) 在 3NF 中。(但您似乎没有遵循正确的规范化程序。)CK(候选键)集是 t3 的 {{e,g}},t1 的 {{a}} 和 zoo 的 {{c,f}} . 这是 BCNF,因为每个表中保存的每个非平凡 FD 都来自一个超级键。(您的 BCNF 理由的一些问题是您需要处理所有 3 个表并且没有表具有 c、f 和 d。)FD c,d → f 不存在于任何表中,因为没有一个具有所有这三个属性,所以你不需要对它做任何事情。但是对于 BCNF 的分解可能存在也可能不存在,其中每个 FD 在原始中都成立,并且可能每个可能的分解都有一些不成立的 FD。但是你需要学习如何规范化。

于 2017-05-12T05:20:49.997 回答