我有一个问题,关于3NF的定义,由Chris在他的书“数据库设计和关系理论”,第78页。
书中给出的定义是:“对于每个非平凡的FD X -> Y,无论X是超级键还是Y是子键,都是3NF当且仅当的。”
(对于日期,"Y是子键“意味着Y包含在候选键中,并且在日期定义中没有假设集合Y的基数。)
然而,在我看来,这个定义并不等同于通常的定义(在其他引用中可以找到),即"R在3NF中,如果对于每个FD X -> Y,FD是琐碎的,或者X是超级键,或者Y\X中的每个元素都包含在候选键中“。
现在考虑具有5个属性R(A、B、C、D、E)的relvar,其FD覆盖如下:
{A,B} -> C,
{C,D} -> E,
E -> B这意味着{A,E} -> {B,C}。R的候选密钥是K1 = {A,B,D},K2 = {A,C,D}和K3 = {A,E,D},因此,如果使用日期的定义,则FD {A,E} -> {B,C}表明R不在3NF中。
但是,如果我们使用“通常”定义(因为每个属性实际上都包含在候选键中),那么它是在3NF中。
有什么我不明白的吗?还是日期真的使用了3NF的另一个定义(比通常的定义更强)?
发布于 2022-05-01 22:00:34
日期定义说:"Y是子键,意思是Y包含在键中,.“。
“通常的定义”(从哪里得到的)表示“否则Y\X中的每个元素都包含在一个键中”。
然后他们都说"Y .包含在钥匙里“。
您可以等效地将{A,E} -> {B,C}写成两个FDs {A,E} -> {B}; {A,E} -> {C}。现在,每个Y\X都“包含在候选密钥中”。
因此,您似乎在抱怨“Y中的每个元素”的措辞,其中的日期定义并不是明确的(?)或者可能是,你还没有完整地引用日期呢?
https://stackoverflow.com/questions/72077768
复制相似问题