表的主键是一个列,它的值在每一行中都不同。由于它们不相同,所以它们使每一行都是唯一的。如果不存在任何一个这样的列,那么主键是两个或更多个列的组合,当这些列的值放到一起时,它们在每一行中都不同。
模型中的每个表都必须具有主键。此规则自动从规定所有行都必须唯一的规则得出。如果有必要的话,主键由所有的列组合而成。不应该将长字符串用作主键。
主键列中绝不允许 NULL 值。NULL 值是不可比较的;即,不能称它们相似或不同。因此,它们不能使某一行对于其他各行来说是唯一的。如果某一列允许 NULL 值,那么它不能作为主键的一部分。定义 PRIMARY KEY 约束时,数据库服务器还会对同一列或组成主键的同一组列静默创建 NOT NULL 约束。
某些实体具有现成的主键,如目录代码或标识号,它们是在模型外部定义的。有时可将多个列或一组列用作主键。有资格成为主键的所有列或组都称为候选键。由于所有候选关键字的唯一性使其在 SELECT 操作中具有可预见性,因此这些候选关键字都不起作用。