主要关键约束基础

CSt*_*uis 3 database-design sql-server primary-key

如果如您所知,可以仅使用唯一索引在表之间创建关系,您能解释为什么存在“主键约束”吗?

使用的 RDBMS 是 SQL Server。

事实上,在创建唯一索引(非空)之后,我可以在另一个表上创建一个指向被索引列的外键约束,而不必声明该列是“主键”......那么,什么目的是什么?是审美的问题吗?

Mik*_*ll' 10

区别主要是历史性的。关系模型的开发部分是为了响应 IMS 处理数据的方式。

当前发布的 IMS 版本为用户提供了对每个文件的选择:在根本不建立索引(分层顺序组织)或仅对主键建立索引之间进行选择。. .

资料来源:大型共享数据库的数据关系模型

科德保留了这个词。(同一来源。)

通常,给定关系的一个域(或域组合)具有唯一标识该关系的每个元素(n 元组)的值。这样的域(或组合)称为主键。

一个关系有多个“域组合”来唯一标识每个元组,这并不罕见。关系模型没有提供将其中之一的状态提升为“主要”的理论基础。就关系模型而言,所有候选键的创建都是相同的。

就标准 SQL 而言,任何声明为 UNIQUE 的列或列组合都可以成为外键约束的目标。过去,dbms 平台在处理声明为 UNIQUE 的列中的 NULL 方面略有不同。这就是老派数据库设计者倾向于 NOT NULL UNIQUE 声明的部分原因;另一部分是 NOT NULL UNIQUE 在功能上等同于 PRIMARY KEY。

UNIQUE 索引和 UNIQUE 约束之间存在语义差异。我更喜欢将约束表示为约束。