【问题标题】:In a database table, what is the maximum number of primary keys?在数据库表中,主键的最大数量是多少?
【发布时间】:2015-02-24 02:08:47
【问题描述】:

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

【问题讨论】:

    标签: rdbms


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      在数据库理论中,表上最关键的约束称为候选键。候选键的列中的值唯一地确定存储在表的一行中的其他列中的值 - 这是一个函数依赖,也是规范化理论的一个关键方面。 (严格来说,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 个字符的缩写吗?)

      【讨论】:

        【解决方案3】:

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

        参考:Maximum Capacity Specifications for SQL Server

        【讨论】:

          【解决方案4】:

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

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

          【讨论】:

            【解决方案5】:

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

            【讨论】:

              【解决方案6】:

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

              【讨论】:

                【解决方案7】:

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

                【讨论】:

                  【解决方案8】:

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

                  【讨论】:

                    【解决方案9】:

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

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

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

                    【讨论】:

                      猜你喜欢
                      • 1970-01-01
                      • 2010-09-15
                      • 2022-12-19
                      • 1970-01-01
                      • 1970-01-01
                      • 2011-03-29
                      • 1970-01-01
                      • 1970-01-01
                      • 1970-01-01
                      相关资源
                      最近更新 更多