首页 > 解决方案 > 为什么 SQL Server 中需要主键,如果不可为空的唯一键可以达到目的

问题描述

如果可以使用不可为空的唯一键来实现唯一标识行的目的,专家能否帮助我理解为什么我们需要 sql 表中的主键。

标签: sqlsql-server

解决方案


本身不需要主键。但它在概念上的作用与唯一索引不同。

主键标识一行。唯一索引只是确保没有重复。SQL 引擎可以根据这些信息优化查询。此外,默认情况下,许多 RDMS 将基于主键创建聚集索引。

您只能有一个主键,并且列不能为空。您可以有多个唯一索引,并且它们可以包含可为空的列。

如果你想要(虽然那将是一个糟糕的设计,所以你不应该)你可以有一个没有主键的表,它有一个唯一的索引。

这是逻辑数据库建模和物理数据库设计/实现之间的一种脱节——从逻辑上讲,实体(表)应该有一个唯一标识每个实例(行)的主键。实际上,您可以自由地使用您的数据库系统做您想做的事情。


推荐阅读