在数据库表中,主键的最大数量是多少?
您只有一个主键(或者可能没有,虽然这会使各种事情变得棘手)但键可以包含多个列.
就个人而言,我发现复合主键(有一列多列)在我使用它们时一直很痛苦,但这可能是由于我的无能.即便如此,在某些情况下,使用复合键在逻辑上是合理的,我可能不会改变设计.(我认为更多的情况是Hibernate在使用复合键时稍微复杂一些.)
在数据库理论中,表上最关键的约束称为候选键.候选键的列中的值唯一地确定存储在表的行中的其他列中的值 - 这是函数依赖性,以及归一化理论的关键方面.(严格地说,连接依赖关系是关键;依赖关系是连接依赖关系的一种特殊情况.)一个表可能有多个候选关键字.在那些候选键中,最多一个可以被指定为"主键"; 其他人成为"替代"钥匙(但由于某种原因,不是'二级钥匙',虽然它似乎是一个明显的名称).
我最喜欢的多个候选键的插图是来自化学和物理学的" 元素表 "(事实上它被称为"表格"很好):
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个字符的缩写?)
好吧,如果你问的是可以组成主键的最大列数是多少,对于SQL Server来说它是16.
参考:SQL Server的最大容量规范.