功能依赖和主键

0 primary-key relational-database functional-dependencies

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

我的想法

当然必须不是吗?这不是主键的重点吗?

rea*_*anb 5

在至少符合第一范式的表中,主键决定表中的每个属性。正如您所说,这就是主键(以及一般的候选键)的要点。


nvo*_*gel 5

根据定义,关系的所有超键(不仅仅是主键)与该关系中的所有属性(不仅仅是非键属性)之间存在函数依赖关系。


phi*_*pxy 5

表的超级键(UNIQUE NOT NULL 列集)是“在功能上确定表中所有其他属性”的列集。表的候选键(不包含更小的超级键的超级键)对于规范化很重要。主键只是一个可区分的候选键。

为什么要区分一个呢?

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

  • Codd(与理论相反)允许候选键列中存在 NULL。(SQL 也是如此。)来自他的“理解关系”文章:

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

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

  • (DBMS、CASE 工具和 ORM 经常使用主键作为与候选键关联的默认值,通常是物理/实现键。但这引出了一个问题。)

因此,超级键起着标识作用,候选键是特殊的超级键,而主键并不是特别特殊的候选键。