超级密钥和候选密钥之间有什么区别? 我已经提到过wiki,dotnet spider以及Database Concepts第4版的书。但我无法理解这个概念。任何人都可以用适当的例子解释一下吗?
答案 0 :(得分:70)
Candidate key
是super key
,您无法删除任何字段。
例如,可以通过主要/次要版本或构建日期(我们假设每晚构建)来识别软件版本。
在三个字段中存储日期当然不是一个好主意,但让我们假装它是出于演示目的:
year month date major minor
2008 01 13 0 1
2008 04 23 0 2
2009 11 05 1 0
2010 04 05 1 1
所以(year, major, minor)
或(year, month, date, major)
是超级密钥(因为它们是唯一的),但不是候选密钥,因为您可以删除year
或major
以及剩余的一组列仍将是超级钥匙。
(year, month, date)
和(major, minor)
是候选键,因为您无法在不破坏唯一性的情况下从中移除任何字段。
答案 1 :(得分:23)
超级键是唯一标识表中行的列的任意组合。候选键是超级键,在不丢失唯一标识属性的情况下不能从中删除任何列。此属性有时称为最小性或(更好)不可简化性。
超级密钥≠通常是主键。主键只是选择作为主键的候选键。然而,在依赖性理论中,候选密钥是重要的,并且主密钥并不比任何其他候选密钥更重要。非主要候选键也称为替代键。
考虑这个元素表:
CREATE TABLE elements
(
atomic_number INTEGER NOT NULL PRIMARY KEY
CHECK (atomic_number > 0 AND atomic_number < 120),
symbol CHAR(3) NOT NULL UNIQUE,
name CHAR(20) NOT NULL UNIQUE,
atomic_weight DECIMAL(8,4) NOT NULL,
period SMALLINT NOT NULL
CHECK (period BETWEEN 1 AND 7),
group CHAR(2) NOT NULL
-- 'L' for Lanthanoids, 'A' for Actinoids
CHECK (group IN ('1', '2', 'L', 'A', '3', '4', '5', '6',
'7', '8', '9', '10', '11', '12', '13',
'14', '15', '16', '17', '18')),
stable CHAR(1) DEFAULT 'Y' NOT NULL
CHECK (stable IN ('Y', 'N'))
);
它有三个唯一标识符 - 原子序数,元素名称和符号。因此,这些中的每一个都是候选键。此外,除非您正在处理只能保存一行数据的表(在这种情况下,空集(列)是候选键),否则您不能拥有小于一列的候选键,所以候选键是不可简化的。
考虑由{原子序数,元素名称,符号}组成的密钥。如果为这三个字段(例如{6,Carbon,C})提供一组一致的值,则可以唯一标识元素的条目 - Carbon。然而,这是一个非常重要的超级密钥,因为它不是不可简化的;您可以消除三个字段中的任何两个而不会丢失唯一标识属性。
作为另一个例子,考虑一个由{atomic number,period,group}组成的密钥。同样,这是一行的唯一标识符; {6,2,14}确定碳(再次)。如果它不是镧系元素和Actinoids,那么{period,group}的组合将是独特的,但由于它们,它不是。但是,和以前一样,原子序数本身足以唯一地标识一个元素,因此这是一个超级密钥而不是候选密钥。
答案 2 :(得分:15)
超级键是唯一标识行的字段组合,候选键是最小超级键。
答案 3 :(得分:4)
基本上,候选密钥是一个超级密钥,不再可以修剪其中的属性。
超级密钥标识数据库的表/关系中唯一的行/元组。它由一组组合的属性组成,这些属性可以假设在表/关系的行/元组上唯一的值。 候选密钥由超级密钥构建,迭代删除/修剪非密钥属性,保持不变:新创建的密钥仍需要唯一标识行/元组
根据属性,候选密钥可能会被视为最小超级密钥。
候选键可用于引用唯一的行/元组,但从RDBMS引擎的角度来看,维护索引的负担要大得多。
答案 4 :(得分:4)
超级密钥是一组或多个列,用于唯一标识表中的行。
从超级密钥集中选择候选密钥,我们在选择候选密钥时唯一要注意的事项是:它不应该有任何冗余属性。这就是他们被称为最小超级密钥的原因。
在Employee
表中有三列:Emp_Code,Emp_Number,Emp_Name
超级键:
以下所有集合都能够唯一标识员工表的行。
{Emp_Code}
{Emp_Number}
{Emp_Code, Emp_Number}
{Emp_Code, Emp_Name}
{Emp_Code, Emp_Number, Emp_Name}
{Emp_Number, Emp_Name}
候选键:
如上所述,它们是没有冗余属性的最小超级密钥。
{Emp_Code}
{Emp_Number}
主键:
数据库设计者正在从候选键集中选择主键。因此,{Emp_Code}
或{Emp_Number}
可以是主键。
答案 5 :(得分:3)
实体集的超级键是一组一个或多个属性,其值唯一地确定每个实体。
实体集的候选键是最小的超级键。
让我们继续进行客户,贷款和借款人设置,您可以从≥≥1的链接中找到图像
customer_id 是客户集的候选键, loan_number 是贷款集的候选键
尽管可能存在几个候选键,但选择了一个候选键作为主键。
借方集由 customer_id 和 loan_number 组成关系集。
答案 6 :(得分:1)
超级键:一组属性或属性组合,用于唯一标识给定关系中的元组。 Superkey有两个属性 独特性和 可简化的集合
候选键:具有以下两个属性的最小超级键集: 独特性和 不可减少的集合或属性
答案 7 :(得分:1)
选择一个候选键作为主键。其他候选键称为备用键。
答案 8 :(得分:1)
超级密钥: 超级密钥是任何属性集,对于这些属性,值始终保证对于表中所有可能的元组集都是唯一的。
候选键: 候选键是最小的&#39;超级键是指唯一的超级键属性的最小子集。
答案 9 :(得分:0)
超级键:超级键是关系(表)中的一组atttibute。它可以唯一地定义关系(表)中的每个tupple。
候选键:我们可以说最小超级键是候选键。候选者是超级密钥的最小子集。并且可以唯一地定义每个tupple。
答案 10 :(得分:0)
简而言之:CANDIDATE KEY是最小的SUPER KEY。
超级键是唯一标识RDBMS中关系(表)中任何记录(或元组)的列(或属性)的组合。
例如,在具有A,B,C和D列的表中考虑以下依赖关系(为快速示例提供此表,因此不涵盖R可能具有的所有依赖关系)。
属性集(行列式) ---可以识别---> (从属)
A -----> AD
B -----> ABCD
C -----> CD
AC -----> ACD
AB -----> ABCD
ABC -----> ABCD
BCD -----> ABCD
现在,B,AB,ABC,BCD会标识所有列,因此这四列都符合超级键的条件。
但是,⊂AB; B⊂ABC; B⊂BCD因此AB,ABC和BCD不符合候选键的资格,因为它们的子集可以识别这种关系,因此它们不是最小的,因此只有B是候选键,而其他不是。
另一件事主键是候选键中的任何一个。
感谢提问