0

在数据库表中,主键的最大数量是多少?

4

9 回答 9

7

您只有一个主键(或者可能没有,尽管这会使各种事情变得棘手),但该键可以包含多于一列。

就个人而言,我发现复合主键(具有多列的主键)在我使用它们时一直很痛苦,但这可能是由于我的无能。即便如此,在某些情况下,使用复合键是合乎逻辑的,我可能不会更改设计。(我认为这更像是 Hibernate 在当时与复合键一起使用时稍微棘手的情况。)

于 2009-02-09T06:20:16.167 回答
6

在数据库理论中,表上最关键的约束称为候选键。候选键的列中的值唯一地确定存储在表的一行中的其他列中的值——这是一个函数依赖,也是规范化理论的一个关键方面。(严格来说,连接依赖是关键;功能依赖是连接依赖的一种特殊情况。)一个表可能有多个候选键。在这些候选键中,最多可以指定一个作为“主键”;其他的成为“备用”键(但由于某种原因,不是“辅助键”,尽管这对它们来说似乎是一个明显的名称)。

我最喜欢的多个候选键的说明是来自化学和物理的“元素表”(它被称为“表”这一事实很好):

CREATE TABLE elements
(
    atomic_number   INTEGER NOT NULL UNIQUE
                    CHECK (atomic_number > 0 AND atomic_number < 120),
    symbol          CHAR(3) NOT NULL UNIQUE,
    name            CHAR(20) NOT NULL UNIQUE,
    atomic_weight   DECIMAL(8,4) NOT NULL,
    stable          CHAR(1) DEFAULT 'Y' NOT NULL
                    CHECK (stable IN ('Y', 'N'))
);

它有 3 个候选键 - 原子序数、符号和名称(根据经验,您可能会使用原子量作为第四个键,但它与其他三个键不同)。其中任何一个都可以指定为主键,但通常会使用原子序数或符号。其中哪一个是首选在很大程度上取决于您是在处理化学(在这种情况下,符号是毫无疑问的赢家)还是(亚)核物理,在这种情况下,原子序数可能更重要。您的辅助表就像同位素表将交叉引用原子序数;您与化合物相关的辅助表更有可能交叉引用该符号。(顺便说一句,你知道原子序数超过 100 的“尚未分离”的元素有 3 个字符的缩写吗?)

于 2009-02-09T07:15:33.850 回答
5

好吧,如果您要问可以组成主键的最大列数是多少,对于 SQL Server,它是 16。

参考:SQL Server 的最大容量规范

于 2009-02-09T06:21:47.160 回答
1

只有一个主键,因为关系数据库是 Edgar Codd 的 12 条关系模型规则的软件表达式,一组 13 条规则在数学上保证完整性、一致性和原子性,因此具有多个主键的对象不是一个数据库表,因为它违反了 codd 的规则。

于 2015-02-23T18:08:47.243 回答
1

你只能拥有一个。它必须位于一个或多个不能接受 NUL 的列上,并且该列(或列的组合)必须是唯一的。

您可以拥有一列或多列的其他唯一索引,但不能将它们指定为 PK。(但他们的行为将与他们的行为相同,所以说你只能拥有一个只是语义。)

于 2009-02-09T06:19:00.553 回答
1

我认为 Madheena 可能实际上想知道使用自动递增主键的表可以有多少行......如果是这样,这取决于您使用的 DBMS 以及您如何创建表(哪种数据类型主键是),所以你必须在你的解释中更详细。

于 2009-02-09T07:23:14.347 回答
0

您最多只能有 1 个主键,但它可以是复合的(该键中有多个列)

于 2009-02-09T06:20:20.923 回答
0

主键始终是一个表。主要可以是单列或多列的组合,它们唯一地表示每一行。

于 2009-02-09T06:20:48.113 回答
0

一张表只能定义一个主键。

表可以容纳的行数/记录数取决于跨越您的 PK 的列数,以及为这些列选择的数据类型。此外,您使用的 RDBMS 也很重要,因为 DBMS 定义了数据类型的大小。

例如,具有一个整数列作为主键的 SQL Server 表可以包含 4,294,967,295 条记录(PK 值从 -2,147,483,648 到 2,147,483,647)。

于 2009-02-09T08:12:03.510 回答