在SQL中,它是复合键还是复合键?


31

关于SQL(计算/数据库):

当我们在一个表中有两个或多个字段一起唯一地标识其记录时,调用它们的正确方法是什么?复合键或复合键?

我在网络上看到过两种用法,所以我不确定。


1
查看以下两个Google搜索趋势:goo.gl/5u4XdR
igordcard

Answers:


32

复合密钥和复合密钥都描述了具有多个属性的候选密钥。根据关系数据库字典(CJDate),它们含义相同。

在ER建模中,术语“复合键”也具有更具体的含义。这意味着其组成属性是对其他实体中的键的引用的键-即复合键形成标识关系。对于大多数目的来说,这不是一个特别有用或重要的概念,因此术语“复合/化合物”通常被视为可互换的。除非您特别指的是复合键的ER建模概念,否则最好坚持使用“复合键”。


3
“在ER建模中,术语“复合键”也具有更具体的含义”-听起来令人信服:)但是您有引用吗?
一天,2012年

因此,复合键是通常用于许多关系的联结表中的键吗?
Josh P

19

我仍然不确定为什么不参考http://en.wikipedia.org/wiki/Compound_key。它非常清楚地指出(并且是正确的):

在数据库设计中,复合键是由2个或更多可唯一标识实体出现的属性组成的键。组成复合键的每个属性本身就是一个简单键。

这通常与组合键相混淆,即使组合键也是由唯一标识一个实体出现的2个或更多属性组成的键,组成组合键的至少一个属性本身也不是简单的键。

复合键由可能是也可能不是外键的元素组成。示例:在交易明细表中,键为(TransactionId,ItemNumber)。交易明细是交易的子实体。TransactionId是一个外键,引用事务表。ItemNumber本身不是键。它仅在单个事务的上下文中唯一地标识项目。

复合键是一个键,其中键的任何部分都是外键。示例:在酒店预订系统中,预订具有复合键(GuestId,HotelId,ArrivalDate)。GuestId标识来宾,并引用来宾表。HotelId标识酒店,并引用酒店表。ArrivalDate标识日期。它可能引用或可能没有Dates表,但是无论哪种方式它都标识一个实体(一个Date)。

还需要注意的是这个事实:简单键是由一列组成的键,而复合键是由两列或更多列组成的。


4
jcolebrand:“复合密钥是一种密钥,密钥的任何部分都可以识别记录。” 不对 根据定义,密钥必须是不可还原的(最小的超级密钥)。如果只需要某些属性来唯一地标识一个元组,那么根据定义,它是一个超键而不是键。
nvogel 2011年

a)我引用了维基百科页面。b)我倾向于同意。复合键的任何部分本身就是一个简单键。我不介意您是否也称它为超级键。我不相信所有复合键都可以是超键。因此,我支持Wikipedia文章中的内容,并且支持我引用的定义。如果可以使您更开心,我可以去获取已出版的精装数据库设计书。
jcolebrand

2
不过,我认为您错过了相关的要点,那就是复合键由其他实体的键组成。密钥的适当子集不可能是密钥。如您所知,键必须是最小的(在它的表中是键)-因此,如果您从中删除任何属性,那么它将不再是键。
nvogel 2011年

2
“密钥”只是“候选密钥”的缩写。候选键的教科书定义始终是“最小超级键”。参考:如果对密钥的定义有任何疑问,请参见Date's Dictionary pg17或The Alice Book。
nvogel 2011年

1
Wikipedia页面上的“ 复合键 ”和“ compsite键 ”的定义已于2014年7月13日更改,并且不再与此答案中的定义匹配。(我没有更改定义,只是指出这些定义现在不匹配。)
spencer7593 2015年

3

在英语中,它是“复合键”。例如,看一下MSDN网站(任何包含“ sql Composite Key”的搜索都可以)。

http://www.google.com/search?q=sql+composite+key+site:msdn.microsoft.com

假设问题与关系数据库有关,我在Wikipedia中搜索了“中立”定义:

复合键是由表中的两个或多个属性组成的键,这些属性(共同)唯一地标识一条记录


1
没有资料,没有参考,没有链接,没有任何东西……不好的答案。


google.com/search?q=sql+composite+key+definition只会带您到数不胜数的谈论SQL复合键的网站
Hemme

1
Google也会搜索复合密钥
jcolebrand

3
这是科学的方法:googlefight.com/…–
Hemme,

3

组合键由多个属性组成,以唯一地标识实体的出现。这与复合键的不同之处在于,构成键的一个或多个属性本身并不是简单的键。

例如,您有一个保存CD集合的数据库。实体之一称为轨道,它在CD上保存轨道的详细信息。它具有CD名称,曲目号的组合键。


2

在我看来,复合键是包含复合键的超集。如果我们接受一个组合键由一个以上的属性(任何种类的属性)组成,而一个复合键则由一个以上的简单键组成。复合键是一种复合键,具有更特殊的含义,但是术语“复合”键始终适合使用。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.