2

超级键可以包含不属于主键的内容吗?

4

2 回答 2

1

超级键可以包含非唯一标识符或主键。但就像复合主键一样,组合必须是唯一的。规范化数据集的表格包含与数据库目的相关的特定实体的数据。因此,例如,具有员工数据库的公司有一个员工表,并且可能有另一个员工行为历史表(促销、评论、工资调整等)

一个键是候选键,如果它有资格唯一地选择表中的特定行,使得该表中的数据完全依赖于该键并且不需要其他任何东西。

假设雇员表是基于美国的。它可能有两个候选人 - 一个可能是员工编号,另一个可能是员工的社会安全号码。如果一家公司要求员工拥有 SSN……,这可能会发生。

好的,两个候选人 - 员工编号和 SSN。

您必须选择一个作为主键,在这种情况下,另一个成为取决于键选择的另一个数据字段。

在美国,基于两个因素,可能会选择员工编号作为 PK,而将 SSN 作为次要字段。首先,SSN 的使用受到法律限制,因为它是促进身份盗用的个人身份信息。其次,一个人可能已经申请了 SSN 但尚未获得。所以 SSN 不能被依赖,从而使其作为候选人无效。

因此,主键和候选键的区别在于其他候选者输掉了比赛。

SUPERKEY 本质上是一个超定键,它保证是唯一的选择器——但这不是最小的。在我的员工表示例中,(员工编号,SSN)的组合将是一个超级键。请注意,超级键通常会包含主键。

不止于此。该定义谈到了一个超级键,它与作为键的整个记录​​具有相同的基数。(终极钥匙,完全不切实际,因为您必须事先了解整张唱片才能将其用作钥匙......)

“基数”简单地说,当我在单个键值上查询表时,返回记录的平均数是多少。对于正确的主键,对于表中存在的所有值,这始终是并且只有 1。(显然,对于表中不存在的数字,它为零。)对于非唯一键,基数将大于一。频谱另一端的常见示例是大小为 N 的表,使用“性别”作为键将为您提供 N/2 的基数。请记住,因为它是 AVERAGE 返回大小,所以表的分布不必是完美的。

希望有帮助。

于 2010-02-01T21:30:59.987 回答
1

从逻辑上讲,是的。如果 tableX有列{A, B, C}并且A是主键,那么,{A}和都是超级键,因为如果你有这些集合中的任何一个,你就知道行中的所有值(如果存在的话。){A, B}{A, C}{A, B, C}

但是,出于某些目的,它不被视为 SQL 中的键,例如,如果表YA并且B您通常不能定义外键Y(A, B) REFERENCES X(A, B),因为{A, B}它不是主键。如果您希望能够声明该外键,则必须添加另一个效率低下的UNIQUE约束,X(A, B)因为它复制了主键的一部分。

在我看来,这是 SQL 的众多缺陷之一。

于 2010-02-01T21:42:18.810 回答