问题
主键是否在功能上确定表中的所有其他属性?
我的想法
肯定不是吗?这不是主键的意思吗?
答案 0 :(得分:4)
在至少为第一范式的表中,主键确定表中的每个属性。如你所说,这是主键(通常是候选键)的重点。
答案 1 :(得分:4)
根据定义,关系中的所有超级密钥(不仅仅是主键)与该关系中的所有属性之间存在功能依赖关系(而不仅仅是非关键属性) )。
答案 2 :(得分:2)
表的超级密钥(UNIQUE NOT NULL列集)是"功能上确定表中所有其他属性的列集"。表的候选键(不包含较小超级键的超级键)对于规范化很重要。 主键只是一个杰出的候选键。
为什么区分一个?
主键在关系理论中不起作用。主要的实际作用是通过其他表中的外键识别行/实体/关联的一致性。
Codd(与理论相反)在候选键列中允许NULL。 (与SQL一样。)来自他的"Understanding Relations"文章:
与候选键相关的基本完整性原则 是的,对于每个基本关系,至少有一个 候选密钥禁止使用空值。
通常,没有必要禁止空值 在多个候选键中 - 因此,通常的做法 恰好指定一个这样的键作为主键: 即,空值的唯一候选键 禁止的。
(DBMS,CASE工具和ORM经常使用主键作为与候选键相关的默认值,通常是物理/实现键。但是begs the question。)
所以superkeys扮演识别角色,候选键是特殊的超级密钥,主键不是特别特殊的候选键。