Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 超级键是否可以包含非';t主键的一部分?_Sql_Relational Model - Fatal编程技术网

Sql 超级键是否可以包含非';t主键的一部分?

Sql 超级键是否可以包含非';t主键的一部分?,sql,relational-model,Sql,Relational Model,可以包含不属于主键的内容吗?超级键可以包含非唯一标识符或主键。但就像复合主键一样,组合必须是唯一的。 规范化数据集具有表,这些表包含与数据库用途相关的特定实体的数据。因此,例如,拥有员工数据库的公司有一个员工表,可能还有另一个员工行为历史记录表(晋升、审核、薪资调整等) 如果一个键有资格在表中唯一地选择一个特定的行,使得该表中的数据完全依赖于该键,而不需要其他任何东西,那么它就是一个候选键 假设employee表是基于美国的。它可能有两个候选人-一个可能是员工号码,另一个可能是员工的社会保险号码

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

超级键可以包含非唯一标识符或主键。但就像复合主键一样,组合必须是唯一的。 规范化数据集具有表,这些表包含与数据库用途相关的特定实体的数据。因此,例如,拥有员工数据库的公司有一个员工表,可能还有另一个员工行为历史记录表(晋升、审核、薪资调整等)

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

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

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

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

在美国,基于两个因素,员工编号可能会被选为主键,而SSN则作为次要字段。首先,对SSN的使用有法律限制,因为它是个人识别信息,促进了身份盗窃。其次,一个人可能已经申请了SSN,但还没有得到它。因此,SSN不能被依赖,从而使其作为候选者无效

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

超级键本质上是一个超定键,一个保证是唯一选择器的键,但它不是最小的。在我的employee表示例中,(employee number,SSN)的组合将是一个超键。请注意,超级键通常包括主键

不止这些。该定义将具有与整个记录相同基数的超键称为键。(终极键,完全不切实际,因为您必须事先知道整个记录才能将其用作键…)

“基数”简单地说,当我在一个键值上查询一个表时,返回的记录的平均数量是多少。对于正确的素数键,对于表中存在的所有值,该值始终且仅为1。(显然,对于表中不存在的数字,它是零。)对于非唯一键,基数将大于1。光谱另一端的通常示例是一个大小为N的表,使用“性别”作为键将获得N/2的基数。记住,因为它是平均回报大小,所以表的分布不一定是完美的


希望有帮助。

从逻辑上讲,是的。如果表
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
是超级键,但不是候选键。这是一个极好的答案,涵盖了一个罕见的场景(当您有一个唯一的主键和一个唯一的字段时),我注意到了,但以前从未见过!非常感谢。