我一直试图通过这个例子找出第2和第3范式之间的区别。这些定义对我来说不起作用......
这些是功能依赖:
A is the candidate key. (A --> A,B,C,D)
FDs:
A --> CD
AC --> D
CD --> B
D --> B
我的想法:它位于第1和第2,但不是第3范式,因为候选键A不包含两列或更多列。但是B过渡依赖于D.所以它不在第3位。
那是对的吗?特别是A的参数少于两列?答案 0 :(得分:0)
首先,让我们看看2NF和3NF是什么。从问题的背景来看,很清楚1NF是理解的,所以我将参考它。如果不清楚,请告诉我,我也会澄清这一点。
2NF:R处于第二范式,当且仅当它处于第一范式并且非主要属性不依赖于该关系的任何候选关键字的任何适当子集。
非素数属性是不属于任何候选键的属性。因此,如果非素数属性可以由保存候选键的非整个子集的函数依赖项确定,则该关系不在2NF中。
例如,让我们考虑一个发票(数字,年份,年龄)表,其中(数字,年份)是候选键。年龄可以单独确定一年,因此表格不在2NF。
在你的情况下,由于密钥是一维的,假设它在1NF,我们可以说它也在2NF。但是,当且仅当它在2NF并且每个非素数属性都不是传递上依赖于每个键时,它在3NF中。
在你的情况下,A是关键,但是从
开始A - > D - >乙
B过渡依赖于A,因此您的表格不在3NF中。要实现3NF,您需要创建另一个表,该表将通过D与此表相关并将保留B.可能的解决方案:
T1(A,C,D)
T2(D,B)
注意,AC - > D和A - > CD是微不足道的,因为A是候选键,候选键确定其他所有内容。如果情况并非如此,您还需要查看1NF。