DB Normalization 是纯粹基于主键完成还是基于所有候选键完成?

Nab*_*eel 7 normalization database-theory

在参考互联网和教科书时,我遇到了两种规范化程序。即。

类型 1。范式仅基于主键。

在这种类型中,

-> 2NF 不允许部分依赖于主键

-> 3NF 不允许对主键的传递依赖。

类型 2。基于所有候选键的更通用的范式

在这种类型中,

考虑了所有候选键的部分依赖和传递依赖。

在我提到的大多数网站中,我找到了仅基于第一种类型的教程和注释。但是 Navathe 和 Elmasri 的教科书“数据库系统基础”描述了这两种类型。甚至维基百科关于 2NF 的页面也分别提到了基于第二种类型的“2NF 和候选键”。

参见2NF 和候选键 - Wiki

但是教科书和维基都没有提到关于哪种类型更好或哪种类型实际上更受欢迎的任何内容。

当没有提到类型时应该遵循哪种类型?希望你明白我的问题。

请帮我解决这些家伙。

nvo*_*gel 13

规范化与所有候选键有关。主键只是一个候选键。主键与任何其他候选键没有区别。

潜在的混淆是因为在关系数据库理论的早期,术语主键用于表示任何所有候选键,而现代用法是主键仅表示一个“首选”或被认为对数据库用户具有特殊意义的键. 不幸的是,您将在网上或什至在印刷品中看到的许多“定义”因此是错误的。

  • @Nabeel,在您的示例中,如果 BC 是候选键,则 B->D 是部分键依赖项,因此 R 不在 2NF 中。如果一个关系有多个候选键,那么你称之为“主要”并不重要——选择是任意的,不会产生任何根本或实际的区别。重要的是您希望满足哪些键和依赖项。也许你老师使用的例子只有一个键?你会发现很多关于每个关系只识别一个候选键的例子。 (4认同)