Sql 超级键是否可以包含非';t主键的一部分?
可以包含不属于主键的内容吗?超级键可以包含非唯一标识符或主键。但就像复合主键一样,组合必须是唯一的。 规范化数据集具有表,这些表包含与数据库用途相关的特定实体的数据。因此,例如,拥有员工数据库的公司有一个员工表,可能还有另一个员工行为历史记录表(晋升、审核、薪资调整等) 如果一个键有资格在表中唯一地选择一个特定的行,使得该表中的数据完全依赖于该键,而不需要其他任何东西,那么它就是一个候选键 假设employee表是基于美国的。它可能有两个候选人-一个可能是员工号码,另一个可能是员工的社会保险号码。如果一家公司要求员工拥有SSN…,这可能会发生 好的,两位候选人-员工编号和SSN 您必须选择一个作为主键,在这种情况下,另一个仅成为另一个数据字段,取决于键的选择 在美国,基于两个因素,员工编号可能会被选为主键,而SSN则作为次要字段。首先,对SSN的使用有法律限制,因为它是个人识别信息,促进了身份盗窃。其次,一个人可能已经申请了SSN,但还没有得到它。因此,SSN不能被依赖,从而使其作为候选者无效 因此,主键和候选键之间的区别在于其他候选键输掉了比赛 超级键本质上是一个超定键,一个保证是唯一选择器的键,但它不是最小的。在我的employee表示例中,(employee number,SSN)的组合将是一个超键。请注意,超级键通常包括主键 不止这些。该定义将具有与整个记录相同基数的超键称为键。(终极键,完全不切实际,因为您必须事先知道整个记录才能将其用作键…) “基数”简单地说,当我在一个键值上查询一个表时,返回的记录的平均数量是多少。对于正确的素数键,对于表中存在的所有值,该值始终且仅为1。(显然,对于表中不存在的数字,它是零。)对于非唯一键,基数将大于1。光谱另一端的通常示例是一个大小为N的表,使用“性别”作为键将获得N/2的基数。记住,因为它是平均回报大小,所以表的分布不一定是完美的Sql 超级键是否可以包含非';t主键的一部分?,sql,relational-model,Sql,Relational Model,可以包含不属于主键的内容吗?超级键可以包含非唯一标识符或主键。但就像复合主键一样,组合必须是唯一的。 规范化数据集具有表,这些表包含与数据库用途相关的特定实体的数据。因此,例如,拥有员工数据库的公司有一个员工表,可能还有另一个员工行为历史记录表(晋升、审核、薪资调整等) 如果一个键有资格在表中唯一地选择一个特定的行,使得该表中的数据完全依赖于该键,而不需要其他任何东西,那么它就是一个候选键 假设employee表是基于美国的。它可能有两个候选人-一个可能是员工号码,另一个可能是员工的社会保险号码
希望有帮助。从逻辑上讲,是的。如果表
X
有列{A,B,C}
,并且A
是主键,那么{A}
,{A,B}
,{A,C}
和{A,B,C}
都是超键,因为如果您有其中任何一个集合,您就知道行中的所有值(如果存在)
但是,出于某些目的,它在SQL中不被视为键,例如,如果表Y
具有a
和B
,则可以不通常定义外键Y(a,B)引用X(a,B)
,因为{a,B}
不是主键。如果您希望能够声明该外键,则必须在X(A,B)
上添加另一个UNIQUE
约束,因为它复制了主键的一部分,因此效率低下
在我看来,这是SQL的众多缺陷之一。
A
是结果一致的唯一原因,并且包含B
和/或C
(或两者的组合)没有额外的好处,因为A
是主键。因此,A
是唯一的“超级键”。您所描述的是一个候选键A
是唯一的候选密钥ABC
,AB
,BC
是超级键,但不是候选键。这是一个极好的答案,涵盖了一个罕见的场景(当您有一个唯一的主键和一个唯一的字段时),我注意到了,但以前从未见过!非常感谢。