那本书 Database Solutions: A Step by Step Guide to Building Databases 2nd 2004 Edition 是一团糟。不幸的是,它说错了话,误导了他们,而且他们的很多措辞都非常糟糕——比如“锻炼”——这是非正式的,从未定义过。
第三范式 (3NF)
已经在 1NF 和 2NF 中的表,其中所有非主键列中的值只能从主键列而不是其他列中计算出来。
这个错误的定义实际上是非正式的,并且当一个表只有一个 CK(候选键)时。但是这本书并没有说,除非间接地和后来它给出了另一个涉及 PK(主键)的错误定义:
第三范式 (3NF) 的正式定义是第一范式和第二范式的表,其中没有非主键列可传递地依赖于主键。
后来它说可以有多个CK,但它仍然给出了错误的定义:
因此,对于具有多个候选键的表,您可以使用 3NF 的广义定义,这是一个位于 1NF 和 2NF 中的表,其中所有非主键列中的值只能从候选键列,没有其他列。
错误地说“主键列”,其中素数列即CK 列是正确的。
他们的另一本书 Database Systems 4th Edition 2005 也介绍了定义的特殊情况,当只有一个 CK 时没有说明,然后给出“一般”定义。至少那些得到“主要属性”是正确的。
第三范式 (3NF) 的一般定义是处于第一和第二范式的关系,其中没有非候选键属性传递依赖于任何候选键。
一张表有多个任何正常形式的 CK 并没有什么不寻常的地方。