功能依赖性和主键

时间:2016-02-15 15:36:32

标签: relational-database primary-key functional-dependencies

问题

主键是否在功能上确定表中的所有其他属性?

我的想法

肯定不是吗?这不是主键的意思吗?

3 个答案:

答案 0 :(得分:4)

在至少为第一范式的表中,主键确定表中的每个属性。如你所说,这是主键(通常是候选键)的重点。

答案 1 :(得分:4)

根据定义,关系中的所有超级密钥(不仅仅是主键)与该关系中的所有属性之间存在功能依赖关系(而不仅仅是非关键属性) )。

答案 2 :(得分:2)

表的超级密钥(UNIQUE NOT NULL列集)是"功能上确定表中所有其他属性的列集"。表的候选键(不包含较小超级键的超级键)对于规范化很重要。 主键只是一个杰出的候选键。

为什么区分一个?

  • 主键在关系理论中不起作用。主要的实际作用是通过其他表中的外键识别行/实体/关联的一致性。

  • Codd(与理论相反)在候选键列中允许NULL。 (与SQL一样。)来自他的"Understanding Relations"文章:

      

    与候选键相关的基本完整性原则   是的,对于每个基本关系,至少有一个   候选密钥禁止使用空值。

      

    通常,没有必要禁止空值   在多个候选键中 - 因此,通常的做法   恰好指定一个这样的键作为主键:   即,空值的唯一候选键   禁止的。

  • (DBMS,CASE工具和ORM经常使用主键作为与候选键相关的默认值,通常是物理/实现键。但是begs the question。)

所以superkeys扮演识别角色,候选键是特殊的超级密钥,主键不是特别特殊的候选键。