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

时间:2010-02-01 21:12:38

标签: sql relational-model

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

2 个答案:

答案 0 :(得分:1)

从逻辑上讲,是的。如果表X{A, B, C}A是主键,则{A}{A, B}{A, C}{A, B, C}都是超级密钥,因为如果你有这些集合中的任何一个,你知道所有行中的值(如果它存在。)

但是,出于某些目的,它不被视为SQL中的密钥,例如如果表Y包含AB,您可以通常定义外键Y(A, B) REFERENCES X(A, B),因为{A, B}不是主要的键。如果您希望能够声明该外键,则必须在UNIQUE上添加另一个X(A, B)约束,这种约束效率低,因为它会复制部分主键。

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

答案 1 :(得分:0)

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

如果密钥有资格唯一地选择表中的特定行,那么密钥就是候选密钥,这样该表中的数据完全依赖于该密钥而不需要任何其他内容。

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

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

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

在美国,根据两个因素,员工人数可能会被选为PK,将SSN作为次要领域。首先,对SSN的使用存在法律限制,因为它是个人识别信息,促进身份盗用。其次,一个人可能申请了SSN但尚未获得SSN。因此,不能依赖SSN,从而使其无效为候选人。

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

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

还有更多的东西。该定义提到了一个超级密钥,其基数与整个记录的基数相同。 (最终的关键,完全不切实际,因为您必须事先知道整个记录才能将其用作关键...)

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

希望有所帮助。