为什么在SQL Server中需要主键,如果非空唯一键可以达到相同的目的

7 浏览
0 Comments

为什么在SQL Server中需要主键,如果非空唯一键可以达到相同的目的

请问专家能帮我理解为什么在SQL表中需要主键,如果可以使用非空唯一键来实现唯一标识行的目的?

0
0 Comments

在SQL Server中为什么需要主键,如果非空唯一键可以满足要求?

主键并不是强制要求的。但是它在概念上具有与唯一索引不同的功能。

主键用于标识行,而唯一索引仅确保没有重复。SQL引擎可以根据此信息优化查询。此外,默认情况下,许多关系型数据库管理系统会根据主键创建聚集索引。

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

如果你想要(尽管这将是一个糟糕的设计,所以你不应该这样做),你可以有一个没有主键但有唯一索引的表。

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

“此外,默认情况下,许多关系型数据库管理系统会根据主键创建聚集索引。”不,这是不正确的。Postgres、Oracle、DB2和Firebird不会在主键上创建聚集索引(因为它们要么没有聚集索引,要么在这些DBMS中使用它们是不常见的)。

_horse_with_no_name 是的,这就是为什么我说“许多”而不是“所有”的原因:P

我的观点是:只有一小部分(我认为只有SQL Server和MySQL)会这样做,而不是“许多”。

0