再谈键、索引、唯一性、聚集的关系

作者:vkvi 来源:ITPOW(原创) 日期:2009-4-14

键的目的是唯一的标识一条记录,比如很常见的 ID,每条记录的 ID 都不一样。包括:

  • 主键
  • 唯一键

在不引起混淆的情况下,可用“键”代指“唯一键”。

索引

索引的目的是使记录查询更快。包括:

  • 聚集索引(聚簇索引)
  • 非聚集索引(非聚簇索引)

在不引起混淆的情况下,可用“索引”代指“非聚集索引”。

唯一性

  • 不管是“主键”还是“唯一键”都必须具有唯一性。既然键都必须具有唯一性,那么为啥起个名字叫“唯一键”呢,不是画蛇添足么?我觉得这样起名的原因可能是为了与“主键”对应,我们大可将“唯一键”理解为“普通键”。
  • 不管是“聚集索引”还是“非聚集索引”,都可以具有唯一性,也可以不具有唯一性。

聚集

  • 不管是“主键”还是“唯一键”,都可以是聚集的,也可以是非聚集的。
  • “聚集索引”必须是聚集的,“非聚集索引”必须是非聚集的,顾名思义。

如果某个键或索引用了聚集,其他键或索引就只能是非聚集的,因为聚集代表记录的物理存储顺序,而记录只能选择一种物理存储顺序。

按理说,键的作用是标识一条记录,与聚集无关,可是我们看到键还是可以设置为聚集,并且主键默认就是聚集的,由于是聚集的,这种情况下我们可以把它看作既是键,又是索引。这点可能不适合所有的数据库管理系统,不过在 SQL Server 中是适合的。

SQL Server 2000 中,在设计表中,打开索引/键选项卡,容易把人搞晕,说实话,该界面设计得确实不好,让人搞混淆了键、索引、唯一性、聚集的关系。在 Visual Web Developer 中管理数据库的界面设计得就不错:键是键、索引是索引,没有搅在一起,见下:

Visual Web Developer 中管理索引/键

最后

有人说,除了“主键”、“唯一键”外,我还知道有“外键”,怎么不列在“键”的“名下”呢,其实“外键”这个命名是从另外一个层面来说的,与本文关系不大,就不谈了,有兴趣的读者还可以继续了解 SQL Server 的五种约束:NOT NULL、UNIQUE、PRIMARY KEY、FOREIGN KEY、CHECK。

相关阅读

相关文章