首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在什么情况下,在表中使用唯一键比使用主键合适?

在什么情况下,在表中使用唯一键比使用主键合适?
EN

Stack Overflow用户
提问于 2012-03-07 11:17:02
回答 4查看 6.2K关注 0票数 5

因为主键和唯一键是相似的。我很难理解这两个概念。我知道主键不接受null,而唯一键只接受null一次。因为空值是唯一的值,所以它只能被接受一次。但是主键的概念是在每一行中都具有唯一性。这也是唯一密钥所做的。这就是为什么我在问什么时候应该使用主键而不是唯一键,反之亦然。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-03-07 11:20:42

唯一约束类似于主键,但每个表可以有多个唯一约束。

声明唯一约束时,SQL Server将创建唯一索引以加快搜索重复项的过程。在这种情况下,索引默认为NONCLUSTERED index,因为每个表只能有一个聚集索引。

  • 每个表的唯一约束数由表上的索引数限制,即249个NONCLUSTERED索引和一个可能的聚集索引。

与主键相反,UNIQUE约束只能接受一次NULL。如果约束是在字段的组合中定义的,那么只要组合值是唯一的,每个字段都可以接受NULL,并且可以有一些值。

另请参阅其他链接(MSDN)

票数 6
EN

Stack Overflow用户

发布于 2012-03-07 16:49:07

执行摘要:使用PRIMARY KEYNOT NULL UNIQUE,每个基表都要有一个键,这一点很重要。两者之间的差异不是关系上的考虑,从逻辑角度来看也不重要;相反,这只是一种心理考虑。

一个relvar可以有多个键,但我们只选择一个作为下划线,并将其称为主键。选择是任意的,所以从逻辑的角度来看,主数的概念并不是很重要。然而,key的一般概念非常重要!术语候选关键字的含义与关键字完全相同(即,添加候选关键字没有实际意义-它是由Ted Codd提出的,因为他将每个关键字视为提名为主关键字的候选关键字)……SQL允许将表的列的子集声明为该表的键。它还允许将其中一个指定为主键。将键指定为主键可以在一定程度上方便可能需要的其他约束

What Is a Key? by Hugh Darwen

这是很平常的.挑选一个键作为主键(然后将所讨论的relvar的任何其他键称为备用键)。但是,是否选择某个关键字作为主要关键字,如果是,则本质上是心理问题,超出了关系模型本身的范围。作为一个良好的实践,大多数基本关系变量可能应该有一个主键-但是,重复一遍,如果这是一个规则,那么它实际上不是一个关系问题……强烈建议SQL用户:对于基表,至少要使用主键和/或唯一规范,以确保每个这样的表至少有一个键。

SQL and Relational Theory: How to Write Accurate SQL Code By C.J. Date

在标准SQL PRIMARY KEY

空值表示唯一性,但是您可以显式地指定它(使用UNIQUE).

  • implies ,但您可以在创建列时显式指定它(但您应该避免explicitly.
  • can restriction).

,以便在一个表中省略它的列,但是您可以指定它们为每个表只声明一个键,但不清楚为什么(最初提出这个概念的Codd没有强加这样的

在一些产品中,PRIMARY KEY隐含着表的聚集索引,但是您可以显式地指定它(您可能不希望主键成为聚集索引!)

对一些人来说,PRIMARY KEY具有纯粹的心理意义:

  • 他们认为它表示外键将被引用(这是由Codd提出的,但实际上并未被标准SQL或SQL vendors).
  • they采用)。

认为它表示表的唯一键(但未能强制执行其他候选键会导致数据丢失,并认为它暗示了一个对业务没有任何意义的“替代”或“人工”键(但实际上通过向用户公开,对企业施加了不必要的重要性)。

票数 5
EN

Stack Overflow用户

发布于 2012-03-07 13:10:54

一个表可以有多个唯一键,但一个表只能有一个主键。如果您的唯一键不是NUL唯一键,那么将其提升为主键总是一个好主意。如果你的存储引擎是INNODB,如果你没有任何主键,那么innodb会自动创建一个内部的HEXDECIMAL主键,这会对性能产生一些影响,因此最好总是使用INNODB存储引擎创建一个主键。

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

https://stackoverflow.com/questions/9595327

复制
相关文章

相似问题

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