DBMS中的主键和超级键有什么区别

Mik*_*Hil 24 primary-key unique-constraint candidate-key

我是 DBMS 的新手,我仍在学习理论。

我对这个关键业务感到非常困惑,在谷歌搜索之后,我将它缩小到只有 2 个我没有得到的键(主键和超级键)。

我有几个关于 DBMS 的问题。如果您能为我解答这些问题,我将不胜感激。

1) DBMS 中的主键和超级键有什么区别? 如果你能用一个全面的例子来正确解释,非常感谢

2)主键和超级键都可以可以有多个列组合成主键和超级键吗?

3)主键是超级键的子集,反之亦然?

Pie*_*ens 24

一个超级中心是一个简单的非最小的候选键,也就是一个有没有严格要求,以确保该行的唯一附加列。

一个主键是最小的候选键,这是说所有组成列,以确保其唯一性严格要求。

作为拥有 30 年经验的数据库开发人员/设计师,在看到这个问题并查了一下之前,我什至从未听说过Super Key这个词。超级键的概念似乎与性能和物理模式设计的主题更相关,因为它直接映射到具有附加列的唯一非聚集索引的概念,以改进查询覆盖。

  • 这是很不准确的。您正在使用超级密钥、CK 和 PK 代替正确的超级密钥、超级密钥和 CK。超级键是一个唯一的集合。(CK 是“最小”超级键。没有“最小 CK”的概念。每个 CK 都是一个超级键。因此,超级键不必比 CK 具有更多的列。PK 是一个 CK,称为 PK。如果它必须是“最小 CK”,那么“最小”就必须意味着“任意”。)SQL PK & UNIQUE NOT NULL 声明超级键。(SQL PK 可能是也可能不是 PK。)超级键对 CK 的定义至关重要,这对包括规范化在内的设计至关重要。看我的回答。 (5认同)

小智 22

超级键:超级键代表键的超集。超级密钥是一组一个或多个属性,它们被共同使用并且可以唯一地标识所有其他属性。

例如,考虑下表:

Book (BookId, BookName, Author)
Run Code Online (Sandbox Code Playgroud)

所以在这张表中我们可以有

 - (BookId) 
 - (BookId, BookName) 
 - (BookId, BookName, Author) 
 - (BookId, Author)
 - (BookName, Author)
Run Code Online (Sandbox Code Playgroud)

作为我们的超级钥匙。每个 Super Key 都能够唯一标识每个元组(记录)。

候选键:候选键是没有任何冗余属性的超级键。换句话说,候选键是最小的超级键。例如,在上图中

 - (BookId) 
 - (BookName,Author)
Run Code Online (Sandbox Code Playgroud)

这两个键可以是候选键,因为其余键具有冗余属性。Super Key(BookId, BookName)记录中的手段可以被唯一标识BookId,因此BookName是冗余属性。

主键:它是数据库设计者选择的候选键,用于标识实体集中的实体。或 用于唯一标识每条记录的键称为主键。

从上面的候选键中,任何一个都可以是主键。另一个未被选为主键的将被称为备用键