首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >主索引和主键的正式定义是什么?

问主索引和主键的正式定义是什么?
EN

Database Administration用户
提问于 2018-01-12 16:48:27
回答 2查看 1.6K关注 0票数 1

下面是来自数据库系统基础(第7版)的

17.1单等级有序索引的类型排序索引有几种类型。在已排序的记录文件的排序键字段上指定主索引。回想一下第16.7节,排序键字段用于物理地对磁盘上的文件记录进行排序,并且每个记录对于该字段都有一个唯一的值。如果排序字段不是键字段,也就是说,如果文件中的许多记录对排序字段具有相同的值,则可以使用另一种类型的索引,称为群集索引。在后一种情况下,数据文件称为群集文件。注意,一个文件最多可以有一个物理排序字段,因此它最多可以有一个主索引或一个群集索引,但不能同时拥有这两个索引。第三种类型的索引,称为辅助索引,可以在文件的任意无序字段上指定。数据文件除了其主要访问方法外,还可以有多个辅助索引。在接下来的三个小节中,我们将讨论这些类型的单层索引。17.1.1主索引主索引是一个有序文件,其记录具有两个字段的固定长度,它具有访问结构的作用,可以有效地搜索和访问数据文件中的数据记录。第一个字段的数据类型与数据文件的排序键字段(称为主键)相同,第二个字段是指向磁盘块(块地址)的指针。对于数据文件中的每个块,索引文件中有一个索引条目(或索引记录)。每个索引条目都具有块中第一条记录的主键字段的值,以及指向该块的指针作为其两个字段值。

具体来说,我的问题是关于一个“主要指标”,因为它涉及到一个更正式的学术术语--我从未上过大学,所以我不知道他们是如何使用这个术语的。“在有序记录文件的排序键字段上指定主索引”是否正确?这是PRIMARY键(用于主索引)和规则键(用于非主非聚集索引)之间的原始区别吗?

我认为这本书没有以每本151.00美元的价格发行7个版本,而且错误地认为,主键需要“有序的记录文件”。

EN

回答 2

Database Administration用户

发布于 2018-01-12 21:08:21

“键”是用于标识特定记录的逻辑结构。考虑到他们的目的,钥匙需要独一无二。主键字段也需要声明为NOT NULL。还有允许将键字段声明为NULL的“备用”键。主键和备用键都有通过Foreign (声明性引用完整性)建立关系的可选次要用途。

“索引”是用来访问一个或多个记录的物理构造。为此目的,不需要唯一性。当索引声明为唯一时,不需要将索引列(S)声明为NOT NULL;只要索引是唯一的,就允许使用NULL,或者在处理多个索引列时允许使用唯一的组合。

考虑到引用的两段,这里有一个术语翻译表:

  • 预订→Server
  • “文件”→表或索引
  • “主索引”→唯一聚集索引
  • “群集索引”非唯一聚集索引(由于群集键列(S)是行标识符,因此需要真正的唯一性,因此Server将通过添加名为“唯一性”的隐藏、自动递增的INT值来保证唯一性,但仅针对实际的非唯一键值:请参阅聚类索引均衡器存在性和大小获取详细信息)。
  • “二级索引”→非线性指数
  • 在唯一聚集索引上定义的“主键”→主键

在Server中,不需要在唯一聚集索引上定义主键,它只需要一个唯一索引(尽管在没有聚集索引的情况下创建PK时的默认行为是使PK聚集)。

此外,外键还可以引用主键或“备用”键(即唯一约束或唯一索引)

下面的示例显示了NONCLUSTERED索引上的PK和引用允许空值的列上定义的备用键的FK:

代码语言:javascript
复制
USE [tempdb];

-- DROP TABLE dbo.Parent
CREATE TABLE dbo.Parent
(
  [ParentID] INT NOT NULL
             CONSTRAINT [PK_Parent] PRIMARY KEY
             NONCLUSTERED,
  [AltKey]   INT NULL
             CONSTRAINT [UQ_Parent_AltKey] UNIQUE NONCLUSTERED
);

-- DROP TABLE dbo.ChildID
CREATE TABLE dbo.ChildID
(
  [ChildID]  INT NOT NULL
             CONSTRAINT [PK_Child] PRIMARY KEY
             NONCLUSTERED,
  [AltKey]   INT NULL
             CONSTRAINT [FK_Child_Parent_AltKey] FOREIGN KEY
             REFERENCES dbo.Parent ([AltKey])
);
票数 2
EN

Database Administration用户

发布于 2018-01-16 18:38:24

索引根本不是关系数学的一部分。它们是RDBMS实现的一部分,只是为了加速数据处理。相反的键是应用在集合上的r/数学约束,这些约束应该符合一些限制,如单一性或存在性。在实践中,主键是表范围内始终存在的唯一标识符,有时是隐式和自动的.可以在主键上构建主索引,但这不是必要的。此外,表可以同时具有多个适合作为主键的键。而这些替代方案可以成为primary key的临时选择。

票数 0
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/195288

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档