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

时间:2009-02-09 06:17:13

标签: rdbms

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

9 个答案:

答案 0 :(得分:7)

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

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

答案 1 :(得分:6)

在数据库理论中,表上最关键的约束称为候选键。候选键的列中的值唯一地确定存储在表的行中的其他列中的值 - 这是功能依赖性,以及归一化理论的关键方面。 (严格地说, join dependencies 是关键的;函数依赖是连接依赖的特殊情况。)一个表可能有多个候选键。在那些候选键中,最多一个可以被指定为“主键”;其他人成为“替代”钥匙(但由于某种原因,不是'二级钥匙',虽然它似乎是他们的明显名称。)

我最喜欢的多个候选键的插图是来自化学和物理学的'table of elements'(事实上它被称为'表'很好):

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个候选键 - 原子序数,符号和名称(根据经验,你可以使用原子量作为第四个,但它不是唯一的,与其他三个相同) 。其中任何一个都可以被指定为主键,但通常使用原子序数或符号。其中哪一个更受欢迎在很大程度上取决于你是在处理化学(在这种情况下,符号是压倒性的赢家)还是(子)核物理,在这种情况下,原子序数可能更重要。像isotopes表这样的辅助表会交叉引用原子序数;您的化学化合物二级表更可能交叉引用该符号。 (顺便提一下,您是否知道原子序数超过100的'尚未分离的'元素有3个字符的缩写?)

答案 2 :(得分:5)

好吧,如果你问组成主键的最大列数是什么,对于SQL Server来说它是16。

参考:Maximum Capacity Specifications for SQL Server

答案 3 :(得分:1)

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

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

答案 4 :(得分:1)

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

答案 5 :(得分:1)

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

答案 6 :(得分:0)

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

答案 7 :(得分:0)

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

答案 8 :(得分:0)

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

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

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

相关问题