Gday小伙子,
好的,所以我有一个数据库类,我有这个例子,让我觉得我真的没有完全理解两个NF之间的区别..
我知道
对于R满足的每个非平凡FD(X-> A),满足下列条件中的至少一个条件的关系R为3NF:
(a)X是R的超级密钥,或
(b)A是R的关键属性
和
关系R在BCNF中如果对于满足R的每个非平凡FD(X-> A),则满足以下条件:
(a)X是R的超级密钥
这是示例:
R =(A,B,C,D)F = {AB-> C,AB-> D,C-> A,D-> B} 1.R是否在3NF,为什么?如果不是,则将其分解为3NF
Sol: Yes. Find all the Candidate Keys: AB, BC, CD, AD Check all FDs in F for 3NF condition
那么,C-> A不会导致违规吗? C不是超级密钥,它不是微不足道的,同样适用于D-> B?
但它不是BCNF:
- 是BC在BCNF,为什么?如果不是,则将其分解为BCNF号。因为对于C-> A,C不是超级密钥。类似于D-> B R1 = {C,D},R2 = {A,C},R3 = {B,D}
那么,C-> A不会导致违规吗? C不是超级钥匙,它不是一件轻而易举的事......
那3NF的第二个条件怎么样? R中某个键中的属性是?
(提示:此类练习的目的部分也是为了向您展示为什么3NF不是一个非常有用的正常形式,以及3NF和BCNF之间的区别很重要的情况)