Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Primary key 为什么使用主键?_Primary Key_Rdbms_Data Annotations - Fatal编程技术网

Primary key 为什么使用主键?

Primary key 为什么使用主键?,primary-key,rdbms,data-annotations,Primary Key,Rdbms,Data Annotations,除了标识表中的唯一列外,还使用了哪些主键?这难道不能通过简单地对列使用自动增量约束来实现吗?我知道PK和FK用于关联不同的表,但这不能通过使用join来实现吗 基本上,当使用主键进行连接时,数据库是如何提高性能的?主要用于外键的引用完整性,当您有PK时,它还将在后台创建一个索引,这样您在查找值时就不需要表扫描了一些PK只是一个自动递增的列。此外,您通常使用PK和FK进行连接。必须有一些关系才能进行连接。此外,默认情况下,大多数DBMS会自动为PKs编制索引,从而提高连接性能,并根据ID查询特定记

除了标识表中的唯一列外,还使用了哪些主键?这难道不能通过简单地对列使用自动增量约束来实现吗?我知道PK和FK用于关联不同的表,但这不能通过使用join来实现吗


基本上,当使用主键进行连接时,数据库是如何提高性能的?

主要用于外键的引用完整性,当您有PK时,它还将在后台创建一个索引,这样您在查找值时就不需要表扫描了

一些PK只是一个自动递增的列。此外,您通常使用PK和FK进行连接。必须有一些关系才能进行连接。此外,默认情况下,大多数DBMS会自动为PKs编制索引,从而提高连接性能,并根据ID查询特定记录。

RDBMS提供程序通常会优化为使用具有主键的表。大多数存储有助于优化查询计划的统计信息。这些统计信息对性能非常重要,尤其是在较大的表上,如果没有主键,它们将无法正常工作,最终会得到不可预测的查询响应时间


大多数数据库最佳实践书籍都建议使用主键创建所有表,没有例外,遵循这种做法是明智的。很少有人说初级软件开发人员不仅仅是一个构建数据库而没有引用完整性的人

您可以在查询中不使用主键进行连接,但是,必须定义主键以强制执行数据完整性约束,至少在SQL Server中是这样。(外键等)


另外,这里有一篇有趣的文章供您阅读。

在Microsoft Access中,如果您有一个链接表,例如SQL Server,则源表必须有一个主键,才能使链接表可写。至少,Access 2000和SQL Server 6.5就是这样。它可能与更高版本不同。

关键是关于数据完整性和标识。密钥的唯一性是通过在数据库中设置一个约束来保证的,该约束可以阻止可能违反密钥的“坏”数据。数据完整性规则以这种方式得到保证的事实正是使密钥可用作标识符的原因。这适用于任何钥匙。按照约定,每个表的一个键称为“主键”,但这并不会降低其他备用键的重要性


在实践中,我们需要能够对所有类型的数据(不仅仅是数字)强制执行唯一性规则,以满足数据质量和可用性的要求。

如果您没有在where子句中使用PK,您肯定仍然需要表扫描。是的……您是对的……我也是:-)……如果您有PK(默认情况下会创建聚集索引)您永远不会得到表扫描(因为聚集索引保存表本身的所有数据)…但是,如果没有包含WHERE子句,您将得到索引扫描