1

我对候选键、主键、最小超键有些困惑。

根据定义:

主键:只有一个属性,所以它必须是最小超键,它也是一个候选键(因为它的最小超键)

第一个结论:如果一个键是主键,那么它也是一个候选键和一个最小超键

以下几点我认为是真的,但我不确定。有人可以和我一起确认吗?

  1. 如果它是最小超键,并不意味着它是主键。但这意味着它是候选键。

  2. 如果是候选键,不一定是最小键,也不一定是主键。

结论:

  1. 主键:只有 1 个值,可以识别整行。它也是候选键和最小

  2. 最小超键:1 个值或字段组合可以识别整行,因此它是候选键,但不是必需的主键。但是如果取出任何一个字段,那么它就不再是钥匙了

  3. 候选键:1 个值或字段组合可以识别整行,但不必是最小的或主要的。

4

3 回答 3

1

简短的答案比您描述的要简单得多。键(也称为候选键或键或辅助键或备用键)是最小超键。换句话说,键是一属性,它们被保证是不可约唯一的,并且永远不会为空。键可能包含一个或多个属性,有时包含零属性(零属性键相对不常见,不经常讨论,但仍可用作键)。

更长的解释:

按照惯例,为方便起见,每个关系的一个键通常被指定为“主”键,这意味着它被认为具有某种特殊意义。特殊意义可以是任何东西——通常它要么是在其他关系中被引用为外键的键,要么是作为该关系的“首选”标识符的键。

然而,重要的是要理解“主”键与任何其他键基本上没有什么不同,除非您选择这样做(或者由于 DBMS 软件的限制而被迫这样做)。因此,原则上没有绝对的理由必须始终指定一个“主”键。假设每个关系至少有一个候选键(根据定义它必须),那么您不妨将这些键中的一个或多个称为“主”。然而,指定一个且仅一个主键是一个非常严格的约定,这是基于 SQL 的 DBMS 语法所支持的约定。

作为历史细节,应该注意的是,关系模型的发明者 EFCodd 最初使用术语主键来表示关系的任何所有键,而不仅仅是一个键。然而,在现代用法中,术语候选键用于最初称为主键的内容,而“主键”的名称以我上面描述的方式使用。不幸的是,在这一点上存在很多混淆,您经常会看到声称“主”键以某种任意方式与其他候选键不同的说法。

这是 Hugh Darwen 关于钥匙主题的:

一个 relvar 可以有多个键,但我们只选择一个作为下划线并将其称为主键。选择是任意的,因此从逻辑的角度来看,主要的概念并不是很重要。然而,密钥的一般概念非常重要!候选键一词的含义与键完全相同(即添加候选键没有实际意义——这是由 Ted Codd 提出的,因为他将每个键都视为被提名为主键的候选键)。

http://www.dcs.warwick.ac.uk/~hugh/M359/What-Is-a-Key.html

于 2012-09-24T20:34:40.227 回答
1

根据维基百科候选键是关系的最小超键,它可以由多个属性组成。

您的关系可能有多个候选键;这些候选键中的每一个都可以是主键 - 这些候选键中的每一个都唯一且可靠地标识您关系中的每个元组。

从这些(可能是几个)候选键中,您选择一个作为主键(基于某些要求或其他因素)。

关系只能有一个主键 - 但该主键可以由多个属性(表列)组成。

于 2012-09-23T18:30:07.850 回答
1

因此,我从您的问题中得出的结论是,您对 DBMS 中通常使用的基本 3 个键(或者更确切地说是 4 个)感到困惑。我将尝试用简短易懂的语言解释它们:

1)超级钥匙

可用于唯一标识表中每个元组(行)的单个属性或属性集称为超级键(可以将其视为大量的键可以称为超级键,因为可能有很多使其唯一可识别的属性组合)-但只需记住超级键“UNIQUENESS”的一件事。

2)候选键(最小超级键)

在我们得到的所有超级键中,我们开始识别最小的键,即。它不能被进一步分解(就属性的组成而言),如果它们被破坏,我们就会失去唯一性属于候选键的类别。 - 只需记住候选键 " UNIQUENESS" +"IRREDUCIBILITY"的一件事。

3)主键

现在从所有剩余的候选键中,我们选择一个最优化的方式来搜索表中的任何行以使其成为主键。设计师可以选择他想要从所有其他候选键中作为主键的键,但是尽管如此,它还是更喜欢遵循一些规则,例如:

A)更喜欢用数字而不是文本作为PK的键。

B)更喜欢获取数据所有者对其具有控制权的密钥。

C)更喜欢长度较短的那个。

d) 并且,如果它们碰巧存在,则更喜欢非复合键。

我希望这可以帮助您弄清楚这个概念。

于 2017-09-04T19:01:10.603 回答