使用复合键是否违反 2NF?

sta*_*kno 4 normalization database-design relational-theory

从我遇到的所有与数据库相关的参考书中,有一个通用规则是数据库表应该至少为 3NF。

据我了解,如果表满足 1NF 并且具有单列主键,则该表被认为是 2NF。如果我错了,请纠正我。

所以我不明白为什么有这么多的争论,特别是对于关联 M:N 表的实体;例如:

一个Product_Customer表,列:

  • CustomerProductID
  • CustomerID
  • ProductID

有人说主键 ( CustomerProductID) 不是必需的,应该使用复合键 ( CustomerID, ProductID) 代替。

但这是否违反了表格的通用规则,因为使用复合键甚至不能满足 2NF 的要求,至少应该有 3NF?

如果我错了,请纠正我,尤其是我理解如果表有复合键的部分,它将不在 2NF 中。

Joe*_*own 10

您对 2NF 的定义不太正确。

2NF 是指关系在 1NF 中并且没有部分依赖关系,这意味着没有谓词(列)仅依赖于多部分键的一部分。

这意味着所有(一个或多个)键都是单列键的表不能违反2NF 定义。然而,它也可能有一个表与多列(复合)键,不会违反2NF。这不是关于您的键中有多少列,而是关于是否存在仅依赖于任何候选键的一部分的非键列。

由于表的多列键可能在 2NF 中,因此具有多列键的表也可能在 3NF 中。您只需要确保也没有传递依赖项。